2017-01-01 9 views
2

나는 매개 변수로 Map<ProcessInfoEnum, String> 걸리는 생성자가 있습니다. 그래서 NO_OPERATION 변수를 아래와 같이 빈 불변 맵으로 초기화하고 있습니다. 지금은 NO_OPERATION 위해 같은 해당 라인을 쓸 수있는 방법을하지만 너무 ImmutableEnumMap로 초기화 할 수guava를 사용하여 빈 ImmutableEnumMap을 초기화하는 방법은 무엇입니까?

public Processor(EnumMap<ProcessInfoEnum, String> values) { 
    this.values = values; 
    } 

: 아래 그림과 같이

public static final Processor NO_OPERATION = new Processor(ImmutableMap.<ProcessInfoEnum, String>of()); 
    private final Map<ProcessInfoEnum, String> values; 

    public Processor(Map<ProcessInfoEnum, String> values) { 
    this.values = values; 
    } 

지금 나는 때문에 약간의 설계 변경에 EnumMap를 사용하여 내 생성자를 변경 한 빈 불변 enum지도? ImmutableEnumMap 이후

// obviously this doesn't work 
    public static final Processor NO_OPERATION = new Processor(ImmutableEnumMap.<ProcessInfoEnum, String>of()); 
    private final EnumMap<ProcessInfoEnum, String> values; 

    public Processor(EnumMap<ProcessInfoEnum, String> values) { 
    this.values = values; 
    } 

그래서 나는 ImmutableEnumMap.of()을 할 수있는 패키지 - 개인 클래스입니다. 다른 방법이 있습니까?

+0

다음을 고려하십시오. http://stackoverflow.com/questions/11244402/is-there-a-corresponding-immutable-enummap-in-guava –

+0

가능성이 Maps.immutableEnumMap (ImmutableMap.of()); –

+0

그걸 시도했지만 작동하지 않고 생성자 정의를 'ImmutableMap'으로 변경하라는 메시지가 나타납니다. –

답변

3

공개 ImmutableEnumMap 유형이 없으므로이 형식을 ImmutableMap으로 입력해야합니다. 따라서 enum 부분에 대해 걱정하지 않고 ImmutableMap.of()를 사용할 수 있습니다. 다른 점이 없다.

+0

필자의 경우 생성자가 EnumMap을 입력 매개 변수로 사용하고 'NO_OPERATION'을'public static final Processor NO_OPERATION = 새 프로세서 (ImmutableMap.of()); '로 선언하면 생성자를 변경하라는 컴파일 오류가 발생합니다. 'EnumMap' 대신'ImmutableMap'을 사용하십시오. –

+1

생성자가 EnumMap을 사용하는 경우 EnumMap을 만들어야합니다. ImmutableMap는 ImmutableMap을 확장합니다. EnumMap은 확장되지 않습니다. 변경할 수있는 EnumMap을 만들어야합니다. 다른 선택의 여지가 없습니다. 모든 EnumMaps는 정의에 따라 변경 가능합니다. (처음에는 생성자에서 EnumMap을 받아들이 겠다는 결정을 다시 생각해 볼 수 있습니다.) –

+0

@LouisWasserman "모든 EnumMaps는 정의상 변경 가능합니다"- 이론적으로는 EnumMap을 확장하여 자신 만의 EnumMap을 만들 수는 없습니까? 'immutableEnumMap' 클래스는'put','putAll','remove'를 오버라이드하여 예외를 던집니다. 아니면 이것이 작동하지 않을 약간의 이유가 있습니까? (나는 이것을 해결책으로 제안하지 않고있다.) – ajb