如何处理 Findbugs “可序列化类中的非瞬态非序列化实例字段”?
2022-08-31 16:14:04
考虑下面的类。如果我对它运行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(理由=“没有错误”,值=“SE_BAD_FIELD”)。我在实际代码中有很多集合和列表,我担心它会在我的代码中散落太多。
有更好的方法吗?