任何人都可以用自己对解决以下问题的最佳途径意见有何评论?我已经尝试过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 2009-06-08 18:17:31
我接受这个答案,因为我不知道这是推荐的做法。我已经在IntelliJ中启用了检查,以防止我们在将来做这件事。谢谢汉克! – danieljimenez 2009-06-08 18:24:48
你不能在构造函数之外的任何地方(在这种情况下是dontPanic()方法)指定一个最终变量(在这种情况下是variableOfDoom)一个新的HashSet。这是你的第二点所暗指的吗? – neesh 2009-06-08 18:29:42