Java:嵌套静态类中的引用外部类

Java: reference outer class in nested static class

本问题已经有最佳答案,请猛点这里访问。

我有这样一个类结构:

1
2
3
4
5
6
7
8
9
public class OuterClass {

    private static class InnerClass {

        public void someMethod() {
            OtherClass.otherMethod(<???>);
        }

}

它是指其他类OtherClass的静态方法:

1
2
3
4
5
6
7
public class OtherClass {

    public static void otherMethod(OuterClass) {
        ....
    }

}

我正在想办法用什么来取代江户十一〔一〕号。如何从内部静态类中引用外部类的实例?我要做的是提到OuterClass的隐式this


您显然需要一个OuterClass类型的对象:

1
2
3
4
public void someMethod() {
    OuterClass oc = new OuterClass();
    OtherClass.otherMethod(oc);
}

如果您的内部类不是静态的,那么您可以执行以下操作:

1
2
3
4
5
6
//remove static here
private class InnerClass {
    public void someMethod() {
        OtherClass.otherMethod(OuterClass.this);
    }
}

您应该知道嵌套类(静态类和非静态类)之间的区别。静态嵌套类只是彼此类似的类,只是在其他类中定义的(通常是由于封装原理)。内部静态类实例不了解外部类实例。

嵌套的内部类(非静态)要求内部类的对象存在于外部类的实例中。这就是为什么你可以通过OuterClass.this访问它。


最简单的方法是在构造函数或方法中传递outerClass的实例,因为innerClass不知道这个类。

这样地:

1
2
3
public void someMethod(OuterClass outerClass) {
   OtherClass.otherMethod(outerClass.myMethod());
}