当类序列化时,为什么SonarQube会出现瞬态/私有错误?

时间:2017-05-11 14:12:13

标签: java serialization sonarqube

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

我的代码片段如下所示:

SonarQube Error

3 个答案:

答案 0 :(得分:6)

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

要解决问题,您可以:

  1. 将字段设为transient,但在序列化期间将忽略该字段
  2. 将字段设为private,以便SonarQube可以验证没有人为其分配不可序列化的列表
  3. 将字段类型更改为可序列化类型(例如java.util.ArrayList

答案 1 :(得分:5)

我收到同样的错误,解决方案是将变量上使用的类转为import socket ip_list = open('output.txt', 'r') ais = socket.getaddrinfo(ip_list, 0) print(ais)

例如,这显示错误,因为Serializable不是Object

Serializable

本案中最简单的解决方案是转换第二个参数private Map<String, Object> map = new HashMap<>(); 。所以,你可以使用:

Serializable

如果您使用自己的班级(而非private Map<String, Serializable> map = new HashMap<>(); ),则可以将班级设为Object

答案 2 :(得分:-1)

如规则文档中所述(您可以在屏幕截图中点击...):https://sonarqube.com/coding_rules#rule_key=squid%3AS1948

  

此规则在非Serializable字段和集合字段上引发了一个问题,当它们不是私有时(因为它们可以在外部分配非Serializable值)