不正确的 serialVersionUID 字段¶
ID: java/incorrect-serial-version-uid
Kind: problem
Security severity:
Severity: warning
Precision: medium
Tags:
- reliability
- maintainability
- language-features
Query suites:
- java-security-and-quality.qls
使用 serialVersionUID
字段作为对象版本号的可序列化类必须将该字段声明为 final
、static
,并且类型为 long
,以便 Java 序列化框架使用它。
建议¶
确保序列化类中的 serialVersionUID
字段为 final、static,并且类型为 long
。
示例¶
在以下示例中,WrongNote
使用错误的类型定义 serialVersionUID
,因此 Java 序列化框架不使用它。但是,Note
正确定义了它,以便框架使用它。
class WrongNote implements Serializable {
// BAD: serialVersionUID must be static, final, and 'long'
private static final int serialVersionUID = 1;
//...
}
class Note implements Serializable {
// GOOD: serialVersionUID is of the correct type
private static final long serialVersionUID = 1L;
}
参考¶
Java API 规范:Serializable。
JavaWorld:确保对序列化对象进行适当的版本控制。