将 "make private or Serializable" 错误标记为误报

Marking "make private or Serializable" error as false-positive

在我的一个 Serializable class 中,Sonar 抱怨,"Make empName transient or Serializable" 低于 属性。 我将对象更改为可序列化 (protected Map<String, Serializable> empName;)。现在它给出 "Make empName private or Serializable" 错误。 我的问题是,我可以将其标记为误报吗,因为如果值的类型是可序列化的,那么 Java 将 在编译时或运行时给出错误?

属性声明:

protected Map<String, Object> empName;

谢谢

没有。一般来说,这不是误报。接口 Map 未实现 Serializable。因此 empName 可以 引用不可序列化的映射,这会导致运行时异常。

在某些情况下,这可能是误报。例如,如果可以证明 empName 从未分配过不可序列化的映射,那么这是误报。

但是,由于您已将该字段声明为 protected 而不是 final,您需要分析包含此声明 的 class 和所有可能的子classes,并检查对该字段的所有分配。 (事实上​​ ,如果你想真正彻底,你还需要反思性作业。)