source

초기화, Guava UnmutableMap

goodcode 2022. 9. 1. 23:14
반응형

초기화, Guava UnmutableMap

Guava는 지도를 초기화하기 위한 멋진 지름길을 제공합니다.그러나 맵이 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"
        );

메시지에는 다음과 같은 내용이 있는 것 같습니다.

UnmutableMap의 최대 크기는 4쌍의 키와 값입니다.

물론 그럴 수는 없지만 이니셜라이저의 크기를 늘리려면 어떻게 해야 할지 모르겠습니다.

뭐가 빠졌는지 누가 좀 말해줄래?

오류 메시지에는 5개만 포함되어 있습니다.K, Vpairs, 총 10개의 인수.이는 설계상이며 UnmutableMap 클래스는 6가지 다른 기능을 제공합니다.of()메서드, 0 ~5개의 키와 값의 쌍을 받아들입니다.는 없습니다.of(...)다음과 같은 이유로 인해 변수 수용 오버로드K그리고.V는 다른 타입으로 할 수 있습니다.

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

능력과 가독성 사이의 균형을 유지하려면 두 가지 방법을 조합할 수 있습니다.

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

이것이 좋은 생각인지 아닌지는 논의의 여지가 있다.

언급URL : https://stackoverflow.com/questions/9489384/initializing-a-guava-immutablemap

반응형