将 "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,并检查对该字段的所有分配。 (事实上 ,如果你想真正彻底,你还需要反思性作业。)
在我的一个 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,并检查对该字段的所有分配。 (事实上 ,如果你想真正彻底,你还需要反思性作业。)