У меня возникли проблемы с использованием нескольких конструкторов в java.Перегруженный конструктор вызывает другой конструктор, но не как первый оператор
то, что я хочу сделать что-то вроде этого:
public class MyClass {
// first constructor
public MyClass(arg1, arg2, arg3) {
// do some construction
}
// second constructor
public MyClass(arg1) {
// do some stuff to calculate arg2 and arg3
this(arg1, arg2, arg3);
}
}
, но я не могу, так как второй конструктор не может вызвать другой конструктор, если только он не является первой линией.
Какое общее решение для такой ситуации? Я не могу вычислить arg2 и arg3 «в строке». Я подумал, может быть, создать метод вспомогательного строительства, который будет выполнять фактическую конструкцию, но я не уверен, что это так «хорошо» ...
EDIT: Использование вспомогательного метода также проблематично, поскольку некоторые из моих полей являются окончательными, и я не могу установить их с помощью вспомогательного метода.
Иногда может быть полезно иметь возможность выбросить исключение, и это плохая привычка бросать его из конструкторов. Для этих ситуаций метод фабрики лучше – Gaim
Я определенно предпочитаю второй вариант, если вы поместите заводский метод в сам класс, а не в другой класс. Первый параметр не позволяет вам назначать поля с параметрами «final». Компилятор не может сказать, что метод 'init' вызывается один раз в каждом конструкторе и никогда не находится за пределами конструктора. Если вам не нравится метод фабрики, см. Мой ответ для другого параметра при вычислении других параметров. – Jorn
@Jorn Я со Стивом Егге на фабриках, они всегда раздражали меня. –