为什么我在将 `this` 添加到列表时会收到此转义警告?

问题描述 投票:0回答:1

我不明白这个

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>();
  }

};
java
1个回答
0
投票

想象你有

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,但它可以。

© www.soinside.com 2019 - 2024. All rights reserved.