小编典典

内部类必须引用封闭类吗?

java

我有一个内部类(非静态),该类在初始化时使用对封闭类的引用。内部类现在会保留对封闭类的引用吗?

class Enclosing {
  class Inner {
    private final ABC innerField = outerField.computeSomething();
  }

  private final XYZ outerField = something();
}

更新

我非常清楚, 可以使用 引用外部类Enclosing.this

但是,如果该类不使用引用, 必须 参考是编译之后呢?即使仅在初始化中使用引用也有必要吗?

它在哪里说内部类 总是 持有对外部类的引用?


阅读 318

收藏
2020-11-30

共1个答案

小编典典

非静态嵌套类 始终 包含对封闭类的引用。在你的榜样,你可以从引用封闭类InnerEnclosing.this

JLS
8.1.3“内部类和封闭实例”

“类别O的直接内部类别C的实例i与O的实例相关联,称为实例i的直接封闭实例。对象的直接封闭实例(如果有)是在创建对象时确定的( §15.9.2)。”

2020-11-30