Java:嵌套静态类

时间:2015-08-05 14:38:40

标签: java static nested

我有这样的类结构:

public class OuterClass {

    private static class InnerClass {

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

}

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

public class OtherClass {

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

}

我正在试图找出代替<???>的内容。如何从内部静态类中引用外部类的实例?我想要做的是引用this的隐式OuterClass

2 个答案:

答案 0 :(得分:4)

你显然需要一个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访问它的原因。

答案 1 :(得分:0)

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

像这样:

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