有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我的班级结构如下:

public class OuterClass {

    private static class InnerClass {

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

}

它指的是另一个类OtherClass的静态方法:

public class OtherClass {

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

}

我正试图弄清楚应该用什么来代替<???>。如何从内部静态类中引用外部类的实例?我想做的是指OuterClass的隐式this


共 (2) 个答案

  1. # 1 楼答案

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

    public void someMethod() {
        OuterClass oc = new OuterClass();
        OtherClass.otherMethod(oc);
    }
    

    如果您的内部类不是静态的,那么您可以:

    //remove static here
    private class InnerClass { 
        public void someMethod() {
            OtherClass.otherMethod(OuterClass.this);
        }
    }
    

    您应该知道嵌套类之间的区别——静态的非静态的。静态嵌套类与其他类一样,只是在其他类中定义的类(通常是因为封装原理)。内部静态类实例不知道外部类实例

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

  2. # 2 楼答案

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

    像这样:

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