当前位置: 首页 > 面试题库 >

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

卫才哲
2023-03-14
问题内容

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

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

  private final XYZ outerField = something();
}

更新

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

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

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我正在扩展ArrayList来创建一个自定义ArrayList,可以在迭代它的同时使用常规ArrayList方法进行修改。为此,我还要创建一个迭代器。 在我的hasNext()和next()方法期间,我需要确保列表没有被修改(可以在任何其他时间修改)。因此,我需要在我的shared()块中引用我的封闭类型。 问题答案: 。因此,在您的情况下,它将为。

  • 我知道如果我想扩展内部类,我应该这样做: 但是在这种情况下,我不明白该怎么办?如何获取内部对象的封闭实例? 此变体不编译:

  • 我认为内部类的成员,即使被声明为私有的,也可以从它的封闭类中访问。但是我遇到了以下代码结构的编译时错误。我的顶级类实现了Iterable接口。Iterator在内部类中实现。当内部类的一个实例通过iterator()方法获得时,我无法使用该实例访问数据栏。 有什么建议吗?

  • 在阅读java Doc时,我得到了以下东西。 内部类C是类O的直接内部类,如果O是C的直接词汇封闭类,并且C的声明不发生在静态上下文中 所以如果我写信 我的问题是在这两个内部类中,哪一个是O的直接内部类? 我也有一些观点。 2.如果类O是C的第n-1个词汇封闭类的直接封闭类,则它是C的第n个词汇封闭类。 3.类O的直接内部类C的实例i与O的实例关联,称为i的直接封闭实例。对象的直接封闭实例(如果有

  • 问题内容: 我收到此错误为- 无法访问类型为GeoLocation的封闭实例。 必须使用类型为GeoLocation的封闭实例来限定分配(例如xxA(),其中x是GeoLocation的实例)。 新的ThreadTask(i) 上将出现此错误。我不知道为什么会这样。任何建议将不胜感激。 问题答案: 嗨,我找到了一个解决方案;-) 发生此错误的原因是,您尝试创建内部类的实例 而不创建主类的实例。 要

  • (我一直在重读那个问题标题,思考它看起来有多荒谬,但我向你保证,这是对问题的最佳描述,我有一个实际的应用程序,其中这是最好的结构。我发誓我没有疯。) 考虑以下内容。每个块都是一个单独的文件: 注意,enclosinstance业务是为了解决涉及中间构造函数调用的问题。请参阅“为什么外部类不能扩展内部类?”。 我希望输出为“2”。但是相反,我在System.out.println(a.this.I)