首先我想问一下Why does Java prohibit static fields in inner classes? ,但问题已经存在。 Bozho 的回答消除了我给出的需要它们 (serialVersionUID
) 的原因。不过,我还是很好奇:
静态字段是只在源代码中禁止还是在类文件中也禁止?
顺便说一句,还有一个令人信服的理由禁止这样做。在 C 中,甚至在函数内部也允许使用静态变量。它们的生命周期与任何其他静态变量相同,只是它们的可见性不同。这同样适用于 Java。
最佳答案
内部类可以定义静态字段:
Inner classes may not declare static members, unless they are compile-time constant fields (§15.28).
因此您可以定义一个序列版本 ID。
当静态字段不是常量时,那么它是合乎逻辑的不允许 - 静态字段不需要类的实例 - 它们是每个类的,而内部类需要拥有类的实例 - 如果没有它们就不能存在一个实例。虽然可以将静态字段定义为内部类,就好像它们在所属类中一样,但这会更加困惑。
关于java - 非静态内部类中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4976871/