为什么 SonarQube 在序列化类时会给出暂时性/私有错误?

2022-09-02 13:09:22

我有一个实现可序列化的java类,我假设类中的变量也会被序列化,但SonarQube向我抱怨它不是。

我的代码片段如下所示:

SonarQube Error


答案 1

SonarQube将此行标记为错误,因为java.util.List没有实现java.io.Serializablejava.util.ArrayList是可序列化的,但是有人可以将其他不可序列化的列表分配给它(例如,在子类中)。bondAxeMarkQuoteUpdatesprotected

要解决此问题,您可以:

  1. 使字段为 ,但在序列化过程中将被忽略transient
  2. 使字段为 ,以便SonarQube可以验证没有人为其分配不可序列化列表private
  3. 将字段类型更改为可序列化类型(例如 java.util.ArrayList)

答案 2

我收到相同的错误,解决方案是将变量上使用的类转换为。Serializable

例如,这显示错误,因为不是:ObjectSerializable

private Map<String, Object> map = new HashMap<>();

在这种情况下,最简单的解决方案是转动第二个参数 。因此,您可以使用:Serializable

private Map<String, Serializable> map = new HashMap<>();

如果您使用的是自己的类(而不是 ),则可以将该类放入 。Objectimplements Serializable