我遇到this问题所描述的情况
得到了解决方案。
但是!!
仍然无法理解为什么不能从静态方法实例化非静态内部类,但是如果非静态类是在单独的文件中编写的(即不是作为内部类),则可以。
答案 0 :(得分:2)
内部类具有特殊的特征。其中一个来自Oracle Java Tutorials。
InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字段。
自己的java文件中的静态嵌套类和类不像内部类那样依赖外部对象,所以你可以创建一个新的,而不需要封闭类的实例。
答案 1 :(得分:1)
因为非静态内部类的实例拥有对它的所有者对象(创建它的外部类的实例)的引用。 static
方法没有关联的外部对象,因此它可以创建一个内部因为没有外部来提供它。
class Outer {
Object somethingInTheOuterObject;
class Inner {
// Secretly holds a reference to its outer.
void f() {
// Can access my enclosing instance objects.
Object o = somethingInTheOuterObject;
}
}
}
static void f() {
// Cannot do this.
new Outer.Inner();
// Can do this.
Outer outer = new Outer();
// Can do this.
Outer.Inner inner = outer.new Inner();
// Can even do this.
Outer.Inner inner1 = new Outer().new Inner();
}
答案 2 :(得分:0)
它与instanciate Integer或静态方法中的任何其他类相同。范围是本地的,因此是允许的。