创建一个inner class http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.3(与嵌套静态类相反)您需要一个封闭类的实例 - 在本例中您没有一个实例。请注意,C# 中没有直接等效的内部类 - C# 中的嵌套类更像是 Java 中的嵌套静态类,其含义static
在 C# 中的类声明中的含义完全不同static
在 Java 的类声明中。
Option 1
如果你真的want如果它是一个内部类,你可以这样写:
public static final TestClass CONSTANT = new SomeConcreteTestClass().new InnerClass(5);
(Where SomeConcreteTestClass
是一个具体的类扩展TestClass
)
或者,可怕的是:
public static final TestClass CONSTANT = ((TestClass) null).new InnerClass(5);
请注意,您需要将声明移出InnerClass
但是,由于内部类不能声明编译时常量表达式之外的静态变量:
如果内部类声明显式或隐式静态的成员,则会出现编译时错误,除非该成员是常量变量(第 4.12.4 节)。
所以你最终会得到:
public abstract class TestClass
{
private final int data;
protected TestClass(int data) { this.data = data; }
public final class InnerClass extends TestClass
{
private InnerClass(int data) { super(data); }
}
public static final TestClass CONSTANT = ((TestClass) null).new InnerClass(5);
}
Option 2
就做InnerClass
static:
public static final class InnerClass extends TestClass
添加的static
这是唯一需要改变的。现在,这更像是一个 C# 嵌套类(尽管泛型的行为有所不同,一如既往……)理想情况下,您可以重命名该类,因为它不是内部类……