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。这是我不知道你能做到的语法。谢谢。“内部静态类”用词不当——内部类是一个非静态的嵌套类。