2 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
但是,您的字段被聲明為final
,地圖本身不是不可變的,您仍然可以put()
向它添加一些項(xiàng)目(除非您正在使用一些項(xiàng)目Collections.unmodifiableMap()
-但無(wú)論如何您都不知道界面),這就是 Sonar 抱怨的原因
嘗試將 包裝Map
在一些不可變的類(lèi)實(shí)現(xiàn)中,并將字段的類(lèi)型更改為此類(lèi)。這有這個(gè)額外的好處,如果將來(lái)你決定需要添加一些關(guān)于文件的額外元數(shù)據(jù)(比如創(chuàng)建時(shí)間)而不是在結(jié)構(gòu)中雕刻,你可以輕松地向你自己的映射器類(lèi)添加一個(gè)Map
字段

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用番石榴的不可變地圖:
public static final ImmutableMap<String, Integer> MY_DATA_RESOURCE =?
? ? ImmutableMap.copyOf(yourMethodCall());
您也可以使用靜態(tài)方法,而不是字段:
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);
}
使用這種方法,您最終還可以決定懶惰地解析和轉(zhuǎn)換文件(當(dāng)有人查詢(xún)其內(nèi)容時(shí))而不是在塊中static {}。
添加回答
舉報(bào)