如何通过内部类实例访问OuterClass?

时间:2013-03-06 16:50:08

标签: java class nested

我知道我可以使用以下方法获取封闭类的实例:

OuterClass.this

但我只能在内部类代码本身内完成。只有我有内部类实例引用和另一个类代码。如何通过内部类实例获取OuterClass实例?

2 个答案:

答案 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);
    }
}

当然,隐式引用的名称完全不可靠,正如我所说,你不应该: - )