java Sonar错误使此成员“受保护”
在下面的类中,我声明myMap
public class AllMap {
public static final Map<String, String> myMap= new HashMap<>();
static {
Map.put("yy", "AA");
Map.put("xx", "BB");
}
}
我需要访问其他类中的地图
public class Test {
FieldMap.Map;
}
一切正常,但声纳在一等舱发出警告:
Make this member "protected".
在线
public static final Map<String, String> myMap = new HashMap<>();
我应该忽略此警告还是将其更改为受保护
# 1 楼答案
如果需要在其他类中访问映射,则应保护它不受修改:
您仍然可以使用它,SonarQube不会将其标记为错误(因为地图是只读的)
阅读有关Collections#unmodifiableMap(Map)的更多信息
# 2 楼答案
Sonar lint问题,因为您正在向客户端代码公开对可变对象的引用。在这里,您将公开一个映射,尽管它是最终的。最终对象允许客户端修改对象的内容
切勿将此类字段初始化为客户端提供的对象引用或从访问者返回对象引用
Reference link
Reference link2
# 3 楼答案
Sonar建议您的“成员”,即:
public final Map<String, String> myMap = new HashMap<>();
不应该公开
为什么强>
将其保留为
public
将使其从任何其他包中可用——因此您将向所有人公开该成员。下面的代码正在直接访问member
:在大多数情况下
members
应该是private
并由getters
和setters
访问,这可能会阻止返回相同的引用-因此您可以在get
引用或set
引用之前实现一些逻辑如果需要使用
static
,请使用static
getter和setter