Доступ к локальным переменным в конструкторе суперкласса
У меня есть супер класс, который имеет этот конструктор:
public Super(String p){
String[] result = p.split(",");
setA(result[0]);
setB(result[1]);
setC(result[2]);
setD(result[3]);
setE(result[4]);
}
Тогда у меня есть подкласс, где я хочу использовать тот же конструктор, но добавить еще 2 строки. Это мой код:
public Sub(String d){
super(d);
setF(result[5]);
setG(result[6]);
}
Используя этот код я получаю ошибку, результат которой не указан. Как я могу это исправить?
1 ответ
По сути, вам нужно будет снова выполнить разбиение в конструкторе подкласса - локальной переменной result
недоступно в конструкторе подкласса:
public Sub(String d){
super(d);
String[] result = d.split(",");
setF(result[5]);
setG(result[6]);
}
Да, это приведет к дублированию работы, но этого несколько трудно избежать. Вы могли бы сделать это, имея частный конструктор подкласса, который принимает String[]
и фабричный метод для первого деления:
protected Super(String[] result) {
setA(result[0]);
setB(result[1]);
setC(result[2]);
setD(result[3]);
setE(result[4]);
}
protected Super(String d) {
this(d.split(","));
}
...
private Sub(String[] result) {
super(result);
setF(result[5]);
setG(result[6]);
}
public static Sub fromString(String d) {
return new Sub(d.split(","));
}
Есть альтернативный вариант, когда конструктор суперкласса вызывает виртуальный метод, который переопределен в подклассе, но он действительно хрупок и достаточно ужасен, что я даже не собираюсь приводить пример.