为什么内部类不能声明静态成员?
Java教程指出,由于内部类与封闭类的实例关联,因此它(内部类)不能自己定义任何静态成员。
有趣的是,为什么内部类不能声明静态成员,例如一些private static
字段,这个内部类的实例可能与同一个内部类的其他实例共享? 这只是Java中的事物的实现,必须被认为是理所当然的或者其他的东西?
基本上只是一个任意的决定。 没有理由不支持,但也没有任何理由支持它。 只需在外部类中声明静态字段即可。
此外,该引用可能不完全正确:我相信你可以在内部类中声明静态serialVersionUID。
由于Java语言规范如此说明:
内部类是一个嵌套类,它不是明确或隐式地声明为静态的。 内部类可能不会声明静态初始化器(第8.7节)或成员接口。 内部类可能不会声明静态成员,除非它们是编译时常量字段(第15.28节)。
至于为什么这样指定,我不知道。 我的猜测是,内部类被设计为小型辅助类,复杂性应该非常有限。
内部class
不能声明static
字段,除非它们是编译时常量。 因此,如果您将static
字段声明为final
则它将起作用。
class Foo {
class Test {
final static int i = 10;
}
}
将编译和运行完美
static
字段只能在static
或顶级类型中声明。 因此,一个(纯的) static
变量只能在static
class
声明。