【发布时间】:2011-02-12 07:16:02
【问题描述】:
首先我想问Why does Java prohibit static fields in inner classes?,但问题已经出现了。 Bozho的回答消除了我需要它们的原因(serialVersionUID)。不过,我还是很好奇:
是只在源代码中还是在类文件中禁止静态字段?
顺便说一句,还有一个令人信服的理由来禁止这样做。在 C 中,即使在函数内部也允许使用静态变量。它们的生命周期与任何其他静态变量相同,只是它们的可见性不同。这同样适用于 Java。
【问题讨论】:
-
一般来说,序列化内部类(而不是静态嵌套类)是个坏主意,因为它们也有对外部类的引用并且也会被序列化。这通常不能满足您的需求。
-
@Peter:当它们被序列化为外部类对象的一部分时,通常需要这样做。
-
@Peter:我认为那里没有问题。内部实例中有一个隐藏的引用,所以外部实例也必须序列化。引用是隐式的,这使得它不明显,但是一旦你知道它......
标签: java static-members inner-classes