我知道我可以使用以下方法获取封闭类的实例:
OuterClass.this
但我只能在内部类代码本身内完成。只有我有内部类实例的引用和另一个类代码。如何通过内部类实例获取OuterClass实例?
答案 0 :(得分:3)
您可以定义一个从外部向呼叫者返回OuterClass
的getter:
public class InnerClass {
...
public OuterClass getOuterInstance() {
return OuterClass.this;
}
}
答案 1 :(得分:0)
你可以(但你不应该)使用反射来完成工作:
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);
}
}
当然,隐式引用的名称完全不可靠,正如我所说,你不应该: - )