8

我想创建一个

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. 有谁能够帮助我?有可能吗?

4

2 回答 2

12

最流行的解决方法几乎可以肯定是Guava ImmutableMap。(披露:我为 Guava 做出了贡献。)

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);
}
于 2012-05-16T08:08:27.233 回答
0

声明等于函数 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();
于 2013-03-07T15:33:39.777 回答