Search code examples
javadictionaryfinalapache-commons-collection

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


I would like to create a

public static final LinkedMap myMap;

Somewhere I found something similar for Maps:

 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);
        }
    }

But I cannot apply the 'unmodifiableMap' method it to a LinkedMap. Can anybody help me? Is it possible at all?


Solution

  • The most popular workaround is almost certainly a Guava ImmutableMap. (Disclosure: I contribute to Guava.)

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

    or

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

    Without other libraries, the only workaround other than the one you've written is

    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);
    }