[英]Make “class” transient or serializable BUT the class is serializable
在查看我的代码后,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或其他类中的其他字段)
有人有线索吗?
可能是因为未正确提供二进制文件。 我的SonarQube配置遇到了类似的问题,然后我发现实现Serializable
的类在不同的模块和/或外部库中。
为sonar.java.binaries
和sonar.java.libraries
设置正确的值允许SonarQube找到二进制文件并正确确定这些类是否可序列化。
仅仅因为某些基类实现Serializable
并不意味着自动所有派生类都可以正确序列化。 派生类应该定义自己的serialVersionUid
。 派生类也可能引入其值可能不可序列化的新字段。
因此,除非SonarQube提示作者实际上意味着该类可序列化(可能通过重新implements Serializable
或声明serialVersionUid
),因此SonarQube对Liskovs替换原则怀疑它是正确的。
然而,分类是关键的,可能需要讨论。 但这就是基于此的意见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.