从内部类对象获取外部类对象

新手上路,请多包涵

我有以下代码。我想掌握创建内部类对象所使用的外部类对象 inner 。我该怎么做?

 public class OuterClass {

    public class InnerClass {
        private String name = "Peakit";
    }

    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        InnerClass inner = outer.new InnerClass();
       // How to get the same outer object which created the inner object back?
        OuterClass anotherOuter = ?? ;

        if(anotherOuter == outer) {
             System.out.println("Was able to reach out to the outer object via inner !!");
        } else {
             System.out.println("No luck :-( ");
        }
    }
}

编辑: 好吧,你们中的一些人建议通过添加一个方法来修改内部类:

 public OuterClass outer() {
   return OuterClass.this;
}

但是,如果我没有修改内部类的控制权,那么(只是为了确认)我们是否有其他方法从内部类对象中获取相应的外部类对象?

原文由 peakit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 469
2 个回答

在内部类本身中,您可以使用 OuterClass.this 。这个表达式允许引用任何词法封闭的实例,在 JLS 中被描述为 Qualified this

不过,我 认为 没有办法从内部类的代码外部获取实例。当然,你也可以随时介绍自己的财产:

 public OuterClass getOuter() {
    return OuterClass.this;
}

编辑:通过实验,看起来包含对外部类的引用的字段具有包级访问权限——至少对于我正在使用的 JDK 是这样。

编辑:使用的名称( this$0 )在 Java 实际上是有效的,尽管 JLS 不鼓励使用它:

$ 字符应该只用于机械生成的源代码,或者很少用于访问遗留系统上预先存在的名称。

原文由 Jon Skeet 发布,翻译遵循 CC BY-SA 3.0 许可协议

OuterClass.this 引用外部类。

原文由 bmargulies 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题