我不明白这个
this-escape
警告。 为什么我在(非this
)内部类 B 的构造函数中将 final
附加到外部类拥有的列表会出现问题?
在这个简单的例子中,如果我将类设为 B
final
,警告就会消失,但我不认为我希望它成为最终的。
/*
javac -Xlint:all wtf.java
Produces this warning:
wtf.java:9: warning: [this-escape] possible 'this' escape before subclass is fully initialized
A.this.all_my_Bs.add(this);
^
*/
public class wtf {
public static class A {
public class B {
public B() {
A.this.all_my_Bs.add(this);
}
}
public java.util.ArrayList<B> all_my_Bs = new java.util.ArrayList<B>();
}
};
想象你有
public class C extends wtf.A.B{
final Integer foo;
public C(Integer x){
assert x != null;
foo = x;}
public String bar() { return foo.toString(); }
}
你不会期望
bar
会抛出 NPE,但它可以。