[java] 구아바 ImmutableMap 초기화

구아바는지도를 초기화하기위한 좋은 지름길을 제공합니다. 그러나 내지도가 9 개의 항목으로 초기화되면 다음 컴파일러 오류 (Eclipse Indigo)가 발생합니다.

of(K, V, K, V, K, V, K, V, K, V)유형 의 메소드 ImmutableMap는 인수에 적용 할 수 없습니다
(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"
        );

메시지는

ImmutableMap의 최대 크기는 키, 값의 4 쌍입니다.

분명히, 이것은 사실이 될 수 없지만 초기화 장치의 크기를 늘리기 위해 어떻게해야하는지 알 수 없습니다.

누군가가 누락 된 것을 말해 줄 수 있습니까?



답변

오류 메시지에는 5 개의 K, V쌍 (총 10 개의 인수) 만 포함되어 있습니다 . 이것은 의도적으로 설계된 것입니다. ImmutableMap 클래스는 6 가지 of()방법을 제공 하며 0 ~ 5 개의 키-값 쌍을 허용합니다. 가 아닌 of(...)A가 있기 때문에 매개 변수 varags 받아들이는 과부하 KV다른 유형이 될 수는.

당신이 원하는 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();


답변

지도가 짧은 경우 다음을 수행 할 수 있습니다.

ImmutableMap.of(key, value, key2, value2); // ...up to five k-v pairs

더 길다면 :

ImmutableMap.builder()
   .put(key, value)
   .put(key2, value2)
   // ...
   .build();


답변

“put”은 더 이상 사용되지 않습니다. 사용 하지 말고 대신 .of를 사용하십시오.

ImmutableMap<String, String> myMap = ImmutableMap.of(
    "city1", "Seattle",
    "city2", "Delhi"
);


답변