制作" class"瞬态或可序列化但该类是可序列化的

时间:2015-04-08 07:00:37

标签: java serialization sonarqube

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或其他类别中的其他字段)

有人有线索吗?

2 个答案:

答案 0 :(得分:3)

可能是因为未正确提供二进制文件。我的SonarQube配置遇到了类似的问题,然后我发现实现Serializable的类在不同的模块和/或外部库中。

sonar.java.binariessonar.java.libraries设置正确的值允许SonarQube找到二进制文件并正确确定这些类是否可序列化。

答案 1 :(得分:0)

仅仅因为某些基类正在实现Serializable并不意味着所有派生类都可以自动正确序列化。派生类应该定义自己的serialVersionUid。派生类也可能引入其值可能无法序列化的新字段。

因此,除非SonarQube提示作者实际上意味着该类可序列化(可能通过重述implements Serializable或声明serialVersionUid),因此SonarQube对Liskovs替代它的怀疑是正确的原理。

然而,重要的分类可能需要讨论。但这就是基于此的意见。