Всем привет! Есть такой конструктор который считывает информацию о квартире:
public Flat(Address flatAddress, double flatArea, boolean furnishing, int bedroomsNum, double flatPrice, List<InfrastructureObject> infrustructure)
Также есть конструкторы Адреса:
public Address(String country,String town,String street,int houseNumber)
И конструктор инфраструктуры:
public InfrastructureObject(InfrastructuresType infrastructuresType,String infrastructureObjectName,double distance)
в итоге , когда я создаю квартиру(объект) получается огромный конструктор вроде этого:
Flat flat1 = new Flat(new Address("Great Britain", "London", "Linkoln St.", 25), 290,
true, 4, 750, new LinkedList<>(Arrays.asList(
new InfrastructureObject(InfrastructuresType.SCHOOL, "School №19", 900),
new InfrastructureObject(InfrastructuresType.HYPERMARKET, "Victoria Gardens hypermarket", 800))));
Как можно сократить такой конструктор, дабы он занимал меньше места по скольку в будущем мне надо будет создавать список квартир? Спасибо за предложения!!!
В зависимости от того объект у вас должен ли быть неизменяемый и все ли параметры должны быть проиницилизированны.
addInfrastructureObject(InfrastructureObject infrustructure)
Во-первых, хардкодить конкретные названия прямо в Java - это значит самому себе проблемы в будущем создать. Надо объекты создавать из БД - ну на крайний случай с текстового файла. Тогда и код будет выглядеть более компактным автоматически.
Во-вторых, InfrastructuresType.SCHOOL - не очень хорошее решение с позиции ООП - потому что в методах Вам тогда придется писать "если тип такой-то то делай это, иначе если тип такой-то ..." - во что потом превращаются такие методы видел неоднократно. Намного лучше и короче просто new School(), причем в нем не надо будет тип проверять - у каждого объекта свой переопределенный метод.
В-третьих, new LinkedList<> - это тоже не очень хорошо. Например, есть документ, а есть журнал документов - это разные сущности со своим поведением и свойствами. Думаю то же самое есть и в Вашем случае.
Если хотя бы эти три рекомендации используете - код значительно сократится и будет намного более читаемым.
Могу предложить использовать паттерн Fluent Interface
. Он похож на Builder
. Суть такова - в классе, для которого у вас пишется такой большой конструктор, вы должны объявить пустой публичный конструктор по умолчанию + set
методы для каждой переменной, которые возвращают this
. Пример:
class ClassA {
...
public ClassA setVar1(... var1) {
this.var1 = var1;
return this;
}
...
}
В итоге, при создании объекта вам нужно будет сделать так:
ClassA a = new ClassA()
.setVar1(...)
.setVar2(...)
.setVar3(...);
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть два класса, один из которых mainВ последнем хранится переменная Name
Пытаюсь собрать запускаемый flat jar с помощью maven, каждый раз натыкаюсь на граблиЯ собрал все то что нагуглил/подсказали в кучу и засунул в корневой...
Хотел разобраться с созданием и запуском jar файловСобрал в кучу что нашел что нужно в pom по этому, но уже в idea получил вот такую проблемку - тег...
Всем привет! Сделал приложение с TextRecognizerПриложение прекрасно работает и определяет текст на Xiaomi Redmi4