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

Java:在嵌套的静态类中引用外部类,java,static,nested,Java,Static,Nested,我的班级结构如下: public class OuterClass { private static class InnerClass { public void someMethod() { OtherClass.otherMethod(<???>); } } public void someMethod(OuterClass outerClass) { OtherClass.otherMethod(ou

我的班级结构如下:

public class OuterClass {

    private static class InnerClass {

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

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

我正试图找出用什么来代替
。如何从内部静态类中引用外部类的实例?我想做的是引用
外部类的隐式
this

您显然需要
外部类的对象
类型:

public void someMethod() {
    OuterClass oc = new OuterClass();
    OtherClass.otherMethod(oc);
}
如果您的内部类不是静态的,那么您可以执行以下操作:

//remove static here
private class InnerClass { 
    public void someMethod() {
        OtherClass.otherMethod(OuterClass.this);
    }
}
您应该知道嵌套类之间的区别-静态类和非静态类。静态嵌套类与其他类一样,只是在其他类中定义的类(通常是由于封装原理)。内部静态类实例不知道外部类实例


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

您显然需要
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访问它。这是最简单的方法,因为内部类不知道这个类,所以在构造函数或方法中传递OuterClass的实例

像这样:

public class OuterClass {

    private static class InnerClass {

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

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

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

像这样:

public class OuterClass {

    private static class InnerClass {

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

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

通过不使内部类
静态
?@tobias_k,我当然同意这不是一个理想的类设置。但是假设我不能改变它,如果类是静态的,那么外部类的实例就没有了,你必须显式地传递一个。如果您有100个
OuterClass
(或者根本没有)的实例,并且您从一个完全不相关的位置调用
InnerClass
的方法,那么它应该使用哪个实例?因为您的类是嵌套的(静态的),所以外部类实例和这个类之间没有任何关系,它只是一个类型声明——仅此而已。您应该将其视为序号独立类,或者使内部类成为非静态类。副本完美地回答了您的问题:它解释了静态嵌套类和非静态嵌套类之间差异的重要性。你在这里也得到了你的答案,你已经接受了——所以我认为重复命名只会带来好处。不要认为作为复制品关闭是一种耻辱。有一次,我甚至结束了自己的问题——重点是减少噪音并将相关问题联系在一起。通过不使内部类
静态
?@tobias_k,我当然同意这不是一个理想的类设置。但是假设我不能改变它,如果类是静态的,那么外部类的实例就没有了,你必须显式地传递一个。如果您有100个
OuterClass
(或者根本没有)的实例,并且您从一个完全不相关的位置调用
InnerClass
的方法,那么它应该使用哪个实例?因为您的类是嵌套的(静态的),所以外部类实例和这个类之间没有任何关系,它只是一个类型声明——仅此而已。您应该将其视为序号独立类,或者使内部类成为非静态类。副本完美地回答了您的问题:它解释了静态嵌套类和非静态嵌套类之间差异的重要性。你在这里也得到了你的答案,你已经接受了——所以我认为重复命名只会带来好处。不要认为作为复制品关闭是一种耻辱。有一次,我甚至结束了自己的问题——重点是减少噪音,并将相关问题联系在一起。这就是我想做的。忘记了内部静态类以任何身份引用“this”是没有意义的,我能够使它成为非静态的,并引用OuterClass.this。这是我不知道你能做到的语法。谢谢。“内部静态类”用词不当——内部类是不是
静态的嵌套类。忘记了内部静态类以任何身份引用“this”是没有意义的,我能够使它成为非静态的,并引用OuterClass.this。这是我不知道你能做到的语法。谢谢。“内部静态类”用词不当——内部类是一个非
静态的嵌套类。