enum的字段必须是Serializable吗?

Hid*_*IRO 8 java sonarqube

我正在通过SonarQube 5.1版分析Java SE 7项目.

然后,我面对squid:S1948下面的代码.

"Serializable"类中的字段应该是瞬态的或可序列化的

Serializable类中的字段本身必须是Serializable或transient,即使该类从未显式序列化或反序列化.这是因为在负载下,大多数J2EE应用程序框架将对象刷新到磁盘,而具有非瞬态,不可序列化数据成员的涉嫌Serializable对象可能导致程序崩溃,并为攻击者打开大门.

enum ShutterSpeed {
   private final Rational value; // Make "value" transient or serializable.
   ...
}
Run Code Online (Sandbox Code Playgroud)

我认为任何枚举字段都不会在J2SE 5.0中序列化(枚举常量序列化)

这是假阳性吗?

整个代码和问题都在这里.

Fed*_*ner 8

这实际上是假阳性.枚举常量序列化(您已提供链接)表示:

枚举常量的序列化与普通的可序列化或可外部化的对象不同.枚举常量的序列化形式仅由其名称组成; 常量的字段值不存在于表单中.

在我看来,它没有任何意义,以纪念Enum的字段值transient或使它们实现Serializable,因为他们永远不会得到系列化,如果他们标记为不管transient或实现Serializable.

如果那个分析工具强迫你做这两件事之一,那么你将编写无用的代码.如果我是你,我会尝试禁用enums的警告.