【发布时间】:2011-06-19 04:11:11
【问题描述】:
考虑下面的课程。如果我对它运行 Findbugs,它会在第 5 行但不在第 7 行给我一个错误(“可序列化类中的非瞬态非可序列化实例字段”)。
1 public class TestClass implements Serializable {
2
3 private static final long serialVersionUID = 1905162041950251407L;
4
5 private Set<Integer> mySet; // Findbugs error
6
7 private HashSet<Integer> myOtherSet;
8
9 }
这是正确的,因为 java.util.Set 从未在其层次结构中实现 Serializable 而 java.util.HashSet 实现了。 但是,最佳实践是针对接口而不是具体实现进行编码。
我怎样才能最好地处理这个问题?
我可以在第 3 行添加一个 @Suppresswarnings(justification="No bug", values="SE_BAD_FIELD")。我的实际代码中有很多集合和列表,我担心它会乱扔我的代码太多了。
有更好的方法吗?
【问题讨论】:
-
如果我们在序列化类中使用 byte[] 导致上述问题该怎么办?
-
我目前无法在此 Java 代码上触发此错误。是否修改了 findbugs 行为?
标签: java serialization findbugs