Java 当使用null显式初始化时,可序列化类中的映射显示为Sonar冲突

Java 当使用null显式初始化时,可序列化类中的映射显示为Sonar冲突,java,sonarqube,sonar-maven-plugin,Java,Sonarqube,Sonar Maven Plugin,我正在使用SonarQube 6.7.3和SonarJava插件5.3 我有一个可序列化的java类,它将映射作为实例变量。 1.当使用null显式初始化时,映射显示S1948规则冲突。 2.移除显式空初始化时,映射未显示任何冲突 在屏幕截图下面可以看到同样的情况。你能帮我理解两者的区别吗 屏幕截图: Map的一些实现是可序列化的,其他的则不是。因此,如果您将其初始化为null,它将引发规则,因为Sonar无法知道您将使用什么实现 这篇文章解释了这一切: 请添加整个代码。如何分配这个变量很重要。

我正在使用SonarQube 6.7.3和SonarJava插件5.3

我有一个可序列化的java类,它将映射作为实例变量。 1.当使用null显式初始化时,映射显示S1948规则冲突。 2.移除显式空初始化时,映射未显示任何冲突

在屏幕截图下面可以看到同样的情况。你能帮我理解两者的区别吗

屏幕截图:

Map的一些实现是可序列化的,其他的则不是。因此,如果您将其初始化为null,它将引发规则,因为Sonar无法知道您将使用什么实现

这篇文章解释了这一切:

请添加整个代码。如何分配这个变量很重要。这个链接在上下文中非常清楚,但它如何应用于我的问题。null mattersIt的显式初始化完全重要。在编译时,sonar不能保证序列化,因为您没有使用Map的可序列化实现(null不是Map的可序列化实现)。所以只要声纳知道,这是不可序列化的。但是JB的回答还有一个很好的观点:“记住声纳只是一个工具,有时会有帮助,有时会妨碍。你应该控制自己,并决定警告是否会让你改变事情。”