繁体   English   中英

使“class”瞬态或可序列化但该类是可序列化的

[英]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.binariessonar.java.libraries设置正确的值允许SonarQube找到二进制文件并正确确定这些类是否可序列化。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM