3
我知道我可以用得到的包围类的实例:如何通过内部类实例访问OuterClass?
OuterClass.this
但我只能在内部类代码本身做到这一点。只有我有参考的内部类实例与另一个类代码。如何通过内部类实例获取OuterClass实例?
我知道我可以用得到的包围类的实例:如何通过内部类实例访问OuterClass?
OuterClass.this
但我只能在内部类代码本身做到这一点。只有我有参考的内部类实例与另一个类代码。如何通过内部类实例获取OuterClass实例?
您可以定义返回OuterClass
给主叫来自外部的吸气剂:
public class InnerClass {
...
public OuterClass getOuterInstance() {
return OuterClass.this;
}
}
你可以(但你不应该)使用反射作业:
import java.lang.reflect.Field;
public class Outer {
public class Inner {
}
public static void main(String[] args) throws Exception {
// Create the inner instance
Inner inner = new Outer().new Inner();
// Get the implicit reference from the inner to the outer instance
// ... make it accessible, as it has default visibility
Field field = Inner.class.getDeclaredField("this$0");
field.setAccessible(true);
// Dereference and cast it
Outer outer = (Outer) field.get(inner);
System.out.println(outer);
}
}
当然,隐含引用的名称是完全不可靠的,所以正如我所说的,你不应该:-)
尽管实际上可以做到这一点(有趣的问题!),但你应该重新考虑哟你的设计(或张贴一个合理的例子,这种访问真的需要) – 2013-03-06 16:51:30
这是一个很好的答案这个问题:http://stackoverflow.com/questions/1816458/getting-hold-of-the-outer-class-object - 从最内级的对象 – tdedecko 2013-03-06 17:01:50