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

Java 如何通过内部类实例访问OuterClass?,java,class,nested,Java,Class,Nested,我知道我可以使用以下方法获取封闭类的实例: OuterClass.this 但我只能在内部类代码本身中完成。我只有使用另一个类代码引用内部类实例的。如何通过内部类实例获取外部类实例 您可以定义一个getter,它从外部向调用者返回OuterClass: public class InnerClass { ... public OuterClass getOuterInstance() { return OuterClass.this; } } 你可以(

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

OuterClass.this

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

您可以定义一个getter,它从外部向调用者返回
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);
    }
}

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

虽然实际上可以这样做(有趣的问题!),但您可能应该重新考虑您的设计(或者在真正需要访问的地方发布一个合理的示例),下面是对这个问题的一个很好的回答: