Может ли кто-нибудь прокомментировать их мнение о том, как наилучшим образом решить следующую проблему? Я попытался инициализировать блоки и инициализировать поле в конструкторе, но не вызывается до того, как переопределенный метод пытается его очистить.NullPointerException с методом переопределения
class TestRunner {
public static void main(String[] args) {
ftw ftw = new ftw();
ftw.dontPanic();
}
}
class wtf {
wtf(){
this.dontPanic();
}
void dontPanic() {
System.out.println("super don't panic");
}
}
class ftw extends wtf {
final HashSet variableOfDoom = new HashSet();
ftw(){
super();
}
void dontPanic() {
super.dontPanic();
System.out.println("sub don't panic");
variableOfDoom.clear(); //This line prints a null pointer exception, because the field hasn't been intialized yet.
}
}
Это правильно, ясный был просто примером для исключения. – danieljimenez
Я принимаю этот ответ, потому что я не знал, что это рекомендуется. Я включил инспекции в IntelliJ, чтобы помешать нам сделать это в будущем. Спасибо Хэнку! – danieljimenez
вы не можете назначить конечную переменную (variableOfDoom в этом случае) новую HashSet вне любого конструктора (в этом случае метод dontPanic()). Это то, о чем упоминается ваш второй пункт? – neesh