亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 最佳實踐靜態最終映射值

Java 最佳實踐靜態最終映射值

慕妹3146593 2022-12-21 12:01:59
我有一個實用程序類,其中包含一個帶有一些值的靜態最終映射。我需要在另一個班級訪問這張地圖。我應該只將地圖聲明為公共的,還是應該在實用程序類中編寫一個 getter,從而讓地圖成為私有的?兩種方式都有效,但最佳做法是什么?public MyUtilityClass {  public static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(      "title", 256,      "text", 512);}public MyAnotherClass {  public void someMethod() {    //accessing the map directly    MAX_LENGTHS.get("title")  }}要么public MyUtilityClass {  private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(      "title", 256,      "text", 512);  public static final getMaxLengthMap() {return MAX_LENGTHS;}}public MyAnotherClass {  public void someMethod() {    //accessing the map directly    getMaxLengthMap().get("title")  }}好吧,實際上鍵是枚舉值。就像是 :private static final Map<String, Integer> MAX_LENGTHS = ImmutableMap.of(      MyEnumClass.TITLE, 256,      MyEnumClass.TEXT, 512);
查看完整描述

5 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超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");

  }

}

這還允許您稍后輕松修改底層實現。例如,您可以為不在地圖中的項目返回默認值等。


查看完整回答
反對 回復 2022-12-21
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您正在使用ImmutableMap項目guava;因此是一個真正的不可變Map.

讓它public不會傷害任何人——因為沒有人能Map以任何方式真正改變它。


查看完整回答
反對 回復 2022-12-21
?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

我不得不說,您可能最好還是Enum首先使用 an 。由于此映射似乎總是完全靜態的:


public enum MaxLength {

    TITLE(256),

    TEXT(512);


    public final int value;


    MaxLength(int value) {

        this.value= value;

    }

}

不再需要該實用程序類,您現在可以直接獲取值:


int length = MaxLength.TITLE.value;


查看完整回答
反對 回復 2022-12-21
?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

這取決于您需要對地圖做什么。允許直接訪問地圖(因此將其設置為公開),將使任何人都可以不受任何限制地使用和修改該地圖。

在您的情況下,地圖是最終的且不可變的,因此這不適用。

但是,如果您只想限制對其某些內容的訪問,例如title,那么正確的選擇是創建一個僅返回String.

將地圖設置為公開,或創建一個返回整個地圖的方法都沒有區別。


查看完整回答
反對 回復 2022-12-21
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

我認為向擁有類添加吸氣劑是可行的方法。


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 的任何實現細節,并使測試模擬變得更加容易。


查看完整回答
反對 回復 2022-12-21
  • 5 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號