У меня есть класс с множеством конечных элементов, которые могут быть созданы с использованием одного из двух конструкторов. Конструкторы имеют некоторый код, который хранится в третьем конструкторе.
// SubTypeOne and SubTypeTwo both extend SuperType
public class MyClass {
private final SomeType one;
private final SuperType two;
private MyClass(SomeType commonArg) {
one = commonArg;
}
public MyClass(SomeType commonArg, int intIn) {
this(commonArg);
two = new SubTypeOne(intIn);
}
public MyClass(SomeType commonArg, String stringIn) {
this(commonArg);
two = new SubTypeTwo(stringIn);
}
Проблема заключается в том, что этот код не компилируется: Variable 'two' might not have been initialized.
Кто-то может вызвать первый конструктор из MyClass, а затем новый объект не будет иметь "два" поля.
Итак, каков предпочтительный способ совместного использования кода между конструкторами в этом случае? Обычно я использую вспомогательный метод, но общий код должен иметь возможность устанавливать конечные переменные, которые могут выполняться только из конструктора.