我有这样的类结构:
public class OuterClass {
private static class InnerClass {
public void someMethod() {
OtherClass.otherMethod(<???>);
}
}
指的是某个其他类OtherClass
的静态方法:
public class OtherClass {
public static void otherMethod(OuterClass) {
....
}
}
我正在试图找出代替<???>
的内容。如何从内部静态类中引用外部类的实例?我想要做的是引用this
的隐式OuterClass
。
答案 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());
}