(我一直在重新阅读该问题的标题并思考它看起来有多荒谬,但我向你保证这是对问题的最佳描述,并且我有一个实际应用程序,这是最好的结构。我发誓我不是疯狂的。)
考虑以下。每个块都是一个单独的文件:
package myPackage;
public class A {
public int i;
public A(int i) {
this.i = i;
}
public class B {
}
}
package myPackage;
import myPackage.A.B;
public class Main {
public static void main(String[] args) {
class C extends B {
public C(A enclosingInstance) {
enclosingInstance.super();
}
public void show() {
System.out.println(A.this.i);
}
}
A myA = new A(2);
C myC = new C(myA);
myC.show();
}
}
请注意,enclosingInstance
业务是解决涉及中间构造函数调用的问题。请参阅“为什么外部类不能扩展内部类?” .
我希望输出为“2”。但相反,我有一个编译错误System.out.println(A.this.i);
:
范围内无法访问类型 A 的封闭实例
我认为我试图解决的编程概念是合理的:在内部创建一种新类型的 Bmain
以提供给 A,它使用 B 类型可以访问的 A 中的东西。
那么我做错了什么,或者为什么这在java中不可能?
编辑/更新:请注意,将代码main
移至非静态方法时会出现相同的错误。也就是说,我尝试将其中的所有内容移动static void main
到一个新的、非静态方法被class Main
调用go()
。然后我改为static void main
单行new Main().go();
。错误在同一个地方。所以这似乎不是class C
在静态上下文中定义的问题。