SonarQube 5.1在审核我的代码后标记了很多关键问题。但是,类本身和字段中引用的类也是可序列化的。引用的类通过类继承可序列化的接口。
这是我的例子
public class A implements Serializable {
private B b; // -> Sonarcube markes this field as not serialzable
}
B类定义如下
public class B extends C {
....
}
C类定义如下
public abstract class C extends D {
....
}
定义了D类
public abstract class D implements Serializable {
....
}
在同一个项目上运行FindBugs并没有看到这些问题。 我不确定它是否是sonarcube中的错误,或者我的代码是否有其他问题(C,D或其他类别中的其他字段)
有人有线索吗?
答案 0 :(得分:3)
可能是因为未正确提供二进制文件。我的SonarQube配置遇到了类似的问题,然后我发现实现Serializable
的类在不同的模块和/或外部库中。
为sonar.java.binaries
和sonar.java.libraries
设置正确的值允许SonarQube找到二进制文件并正确确定这些类是否可序列化。
答案 1 :(得分:0)
仅仅因为某些基类正在实现Serializable
并不意味着所有派生类都可以自动正确序列化。派生类应该定义自己的serialVersionUid
。派生类也可能引入其值可能无法序列化的新字段。
因此,除非SonarQube提示作者实际上意味着该类可序列化(可能通过重述implements Serializable
或声明serialVersionUid
),因此SonarQube对Liskovs替代它的怀疑是正确的原理。
然而,重要的分类可能需要讨论。但这就是基于此的意见。