我有以下代码。我想获取外部类对象,使用它创建内部类对象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;
}
但是如果我无法控制修改内部类,那么(只是为了确认)我们是否有其他方法从内部类对象获取相应的外部类对象?
在内部类本身中,您可以使用OuterClass.this
。该表达式允许引用任何词汇上封闭的实例,在 JLS 中被描述为 Qualified this
.
我不认为有一种方法可以从内部类的代码外部获取实例。当然,您随时可以介绍自己的属性(property):
public OuterClass getOuter() {
return OuterClass.this;
}
编辑:通过实验,看起来保存对外部类的引用的字段具有包级访问权限 - 至少对于我正在使用的 JDK 来说是这样。
编辑:使用的名称 (this$0
) 在 Java 中实际上有效,尽管 JLS不鼓励其使用:
The $
character should be used only in mechanically generated source code or, rarely, to access pre-existing names on legacy systems.
我是一名优秀的程序员,十分优秀!