我很想了解为什么以下实例无法编译:
Superclass.Subclass myObject = new Superclass.Subclass();
错误消息如下:
No enclosing instance of type Superclass is accessible. Must qualify the allocation with an enclosing instance of type Superclass (e.g. x.new A() where x is an instance of Superclass).
封闭实例是什么意思?为什么这是必要的?
这条消息似乎表明语法必须是:
Superclass mySuperObj = new Superclass();
Superclass.Subclass mySubObj = mySuperObj.new Subclass();
但它无法解释我的方法有什么问题或者为什么必须使用这种替代语法。
最佳答案
new [enclosing class].[enclosed class](...)
idiom 用于初始化静态嵌套类,即声明为 static
的嵌套类。他们封闭类(class)的成员。
[enclosing class instance].new [enclosed class](...)
idiom 用于初始化内部类,即声明为其封闭类的实例成员的嵌套类。
示例
与...
class A {
static class B {}
class C {}
}
您将使用:
-
new A.B()
-
new A().new C()
,或者给定的A
实例叫a
, -
a.new C()
注意
关于从嵌套类实例化 Java 对象 - 这有什么问题 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45736285/