Одна из задач натолкнула на мысль, а что если в классе объявить поля, но инициализировать их не конструктором, а методом? Будет ли принципиальная разница?
public class Solution {
public static void main(String[] args) throws Exception {
Cat cat = new Cat().initializeIdAndName(1, "Барсик");
System.out.println(cat);
}
static class Cat{
long id;
String name;
public Cat initializeIdAndName(long id, String name) {
this.id = id;
this.name = name;
return this;
}
@Override
public String toString() {
return String.format("The Cat's name is %s, id = %d", name, id);
}
}
}
Andrew
22 уровень
Получается, что можно обойтись вообще без конструктора?
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Pavel
19 декабря 2023, 13:34
конструктор это тоже метод
+1
Сергей Я Java Developer в DXC/Luxoft Expert
24 ноября 2023, 09:57
В вашем примере вы в любом случае используете конструктор без параметров, создавая в начале пустой объект и после у него вызывая метод для заполнения полей данными. Представьте, что вам нужен объект, который попросту не может существовать пустым?
+1
Денис Enterprise Java Developer
24 ноября 2023, 09:45
Без конструктора обойтись не получится, потому что даже если ты его не задаёшь руками, компилятор сам добавляет конструктор по умолчанию в скомпилированные классы, потому он там есть.
В более менее серьёзном программировании в основном оперируют двумя типами конструкторов - это конструктор по умолчанию, чтобы всякие фреймворки работающие через рефлексию нормально работали с твоими классами, и это конструктор для final полей, остальное задаётся или билдерами или сеттерами, принципиальной разницы нет - чистая вкусовщина. Делается это все посредством одной и той же либы - Lombok.
0
Павел
24 ноября 2023, 05:35
Ну все пасаны расходимся - конструкторы не нужны)
Если по теме то разницы для инициализации нет, конструктор ведь тоже своего рода метод.
ПС: initializeIdAndName - "инициализация и имя" довольно не понятное наименование метода
0
bighugеmistеr Android Developer
30 ноября 2023, 05:07
to name — "именовать"
0