5 回答

TA貢獻(xiàn)1943條經(jīng)驗 獲得超7個贊
吸氣劑不添加任何東西 - 我只是將其公開。
可能有意義的是有一個直接返回值的方法:
public MyUtilityClass {
private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(
"title", 256,
"text", 512);
public static final getMaxLength(String item) {return MAX_LENGTHS.get(item);}
}
public MyAnotherClass {
public void someMethod() {
//accessing the map directly
getMaxLength("title");
}
}
這還允許您稍后輕松修改底層實現(xiàn)。例如,您可以為不在地圖中的項目返回默認(rèn)值等。

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊
您正在使用ImmutableMap
項目guava
;因此是一個真正的不可變Map
.
讓它public
不會傷害任何人——因為沒有人能Map
以任何方式真正改變它。

TA貢獻(xiàn)1824條經(jīng)驗 獲得超8個贊
我不得不說,您可能最好還是Enum首先使用 an 。由于此映射似乎總是完全靜態(tài)的:
public enum MaxLength {
TITLE(256),
TEXT(512);
public final int value;
MaxLength(int value) {
this.value= value;
}
}
不再需要該實用程序類,您現(xiàn)在可以直接獲取值:
int length = MaxLength.TITLE.value;

TA貢獻(xiàn)1757條經(jīng)驗 獲得超8個贊
這取決于您需要對地圖做什么。允許直接訪問地圖(因此將其設(shè)置為公開),將使任何人都可以不受任何限制地使用和修改該地圖。
在您的情況下,地圖是最終的且不可變的,因此這不適用。
但是,如果您只想限制對其某些內(nèi)容的訪問,例如title
,那么正確的選擇是創(chuàng)建一個僅返回String
.
將地圖設(shè)置為公開,或創(chuàng)建一個返回整個地圖的方法都沒有區(qū)別。

TA貢獻(xiàn)2051條經(jīng)驗 獲得超10個贊
我認(rèn)為向擁有類添加吸氣劑是可行的方法。
public MyUtilityClass {
private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(
"title", 256,
"text", 512);
public static int getLength(final String key) {
return MAX_LENGTHS.get(key);
}
}
public MyAnotherClass {
public void someMethod() {
int x= MyUtilityClass.getLength("title")
}
}
這MyAnotherClass避免了需要了解 getter 的任何實現(xiàn)細(xì)節(jié),并使測試模擬變得更加容易。
添加回答
舉報