簡體   English   中英

如何初始化一個公共靜態最終只讀LinkedMap(雙向映射)

[英]How to initialize a public static final read-only LinkedMap (bidirectionnal map)

我想創建一個

public static final LinkedMap myMap;

在某個地方,我發現了類似地圖的地圖:

 public class Test {
        private static final Map<Integer, String> MY_MAP = createMap();

        private static Map<Integer, String> createMap() {
            Map<Integer, String> result = new HashMap<Integer, String>();
            result.put(1, "one");
            result.put(2, "two");
            return Collections.unmodifiableMap(result);
        }
    }

但我無法將“unmodifiableMap”方法應用於LinkedMap 有誰能夠幫我? 有可能嗎?

最流行的解決方法幾乎可以肯定是Guava ImmutableMap (披露:我向番石榴捐款。)

Map<Integer, String> map = ImmutableMap.of(
  1, "one",
  2, "two");

要么

ImmutableMap<Integer, String> map = ImmutableMap
  .<Integer, String> builder()
  .put(1, "one")
  .put(2, "two")
  .build();

沒有其他庫,除了你寫的那個之外,唯一的解決方法是

static final Map<Integer, String> CONSTANT_MAP;
static {
  Map<Integer, String> tmp = new LinkedHashMap<Integer, String>();
  tmp.put(1, "one");
  tmp.put(2, "two");
  CONSTANT_MAP = Collections.unmodifiableMap(tmp);
}

聲明變量等於函數Create()對我沒有任何意義。

如果你需要一個最終變量myMap,你必須這樣寫:

// = createMap();
private final static LinkedHashMap<Integer, String> 
                                          myMap = new LinkedHashMap<Integer, String>();
static {
    myMap.put(1, "one");
    myMap.put(2, "Two");
};

public static void main(String[] args) {

  for( String link : myMap.values()){
    System.out.println("Value in myMap: "+link);
  }

}

或者如果你想使用create()函數,你必須從myMap中刪除final關鍵字並在main中使用myMap:

    public static void main(String[] args) {

    myMap = Test.createMap();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM