我有以下代码。我想掌握创建内部类对象所使用的外部类对象 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 许可协议
在内部类本身中,您可以使用
OuterClass.this
。这个表达式允许引用任何词法封闭的实例,在 JLS 中被描述为 Qualifiedthis
。不过,我 认为 没有办法从内部类的代码外部获取实例。当然,你也可以随时介绍自己的财产:
编辑:通过实验,看起来包含对外部类的引用的字段具有包级访问权限——至少对于我正在使用的 JDK 是这样。
编辑:使用的名称(
this$0
)在 Java 中 实际上是有效的,尽管 JLS 不鼓励使用它: