我有一个内部类(非静态),该类在初始化时使用对封闭类的引用。内部类现在会保留对封闭类的引用吗?
class Enclosing { class Inner { private final ABC innerField = outerField.computeSomething(); } private final XYZ outerField = something(); }
更新
我非常清楚, 可以使用 引用外部类Enclosing.this。
Enclosing.this
但是,如果该类不使用引用, 必须 参考是编译之后呢?即使仅在初始化中使用引用也有必要吗?
它在哪里说内部类 总是 持有对外部类的引用?
非静态嵌套类 始终 包含对封闭类的引用。在你的榜样,你可以从引用封闭类Inner的Enclosing.this。
Inner
JLS 8.1.3“内部类和封闭实例”:
“类别O的直接内部类别C的实例i与O的实例相关联,称为实例i的直接封闭实例。对象的直接封闭实例(如果有)是在创建对象时确定的( §15.9.2)。”