2 回答
TA贡献1772条经验 获得超5个赞
但是,您的字段被声明为final
,地图本身不是不可变的,您仍然可以put()
向它添加一些项目(除非您正在使用一些项目Collections.unmodifiableMap()
-但无论如何您都不知道界面),这就是 Sonar 抱怨的原因
尝试将 包装Map
在一些不可变的类实现中,并将字段的类型更改为此类。这有这个额外的好处,如果将来你决定需要添加一些关于文件的额外元数据(比如创建时间)而不是在结构中雕刻,你可以轻松地向你自己的映射器类添加一个Map
字段
TA贡献1810条经验 获得超5个赞
您可以使用番石榴的不可变地图:
public static final ImmutableMap<String, Integer> MY_DATA_RESOURCE =
ImmutableMap.copyOf(yourMethodCall());
您也可以使用静态方法,而不是字段:
private static final Map<String, Integer> MY_DATA_RESOURCE;
static {
MY_DATA_RESOURCE = parseAndTransformFile();
}
public static Map<String, Integer> myDataResource() {
return Collections.unmodifiableMap(MY_DATA_RESOURCE);
}
使用这种方法,您最终还可以决定懒惰地解析和转换文件(当有人查询其内容时)而不是在块中static {}。
添加回答
举报