initializing a Guava ImmutableMap

dictionary, guava, java

Solution

Notice that your error message only contains five `K, V` pairs, 10 arguments total. This is by design; the ImmutableMap class provides six different `of()` methods, accepting between zero and five key-value pairings. There is not an `of(...)` overload accepting a varags parameter because `K` and `V` can be different types.

You want an `ImmutableMap.Builder`:

ImmutableMap<String,String> myMap = ImmutableMap.<String, String>builder()
    .put("key1", "value1") 
    .put("key2", "value2") 
    .put("key3", "value3") 
    .put("key4", "value4") 
    .put("key5", "value5") 
    .put("key6", "value6") 
    .put("key7", "value7") 
    .put("key8", "value8") 
    .put("key9", "value9")
    .build();

Problem

Guava offers a nice shortcut for initializing a map. However I get the following compiler error (Eclipse Indigo) when my map initializes to nine entries. The method `of(K, V, K, V, K, V, K, V, K, V)` in the type `ImmutableMap` is not applicable for the arguments `(String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String)` ``` ImmutableMap<String,String> myMap = ImmutableMap.of( "key1", "value1", "key2", "value2", "key3", "value3", "key4", "value4", "key5", "value5", "key6", "value6", "key7", "value7", "key8", "value8", "key9", "value9" ); ``` The message appears to say that An ImmutableMap has a maximum size of four pairs of key,value. Obviously, this cannot be the case but I can't figure out what to do to increase the size of my initializer. Can someone tell me what is missing?

Original source