次の問題を解決する最善の方法について意見を述べることができますか?私はinitブロックを試して、コンストラクタのフィールドを初期化しましたが、オーバーライドされたメソッドがそれをクリアしようとする前に呼び出されることもありません。オーバーライドメソッドを使用した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
コンストラクタの外側(この場合はdontPanic()メソッド)のどこにでも、最終変数(この場合variableOfDoom)に新しいHashSetを割り当てることはできません。それはあなたの第2のポイントが何を指しているのでしょうか? – neesh