2010-07-23 4 views
2

문자열을 열거 형 T에 대한 정확한 열거 형으로 변환하는 클래스 EnumConverter<T extends Enum<?>> (Enum.valueOf을 사용할 수 없음)이 있습니다. 이 같은 공장 방법이 클래스의 인스턴스를 생성 :제네릭을 사용하는 정적 팩터 리 메서드

public static <T extends Enum<?>> EnumConverter<T> getInstance(Class<T> enumClass) { 
    return new EnumConverter<T>(enumClass.getEnumConstants()); 
} 

이 작동하지만, 지금은 Map와 즉 열거 당 하나,이 있는지 확인하기 위해 EnumConverter 인스턴스를 캐시 할 내 문제는 이것을 신고하는 방법은 Map입니다. 내가 온 가장 가까운 이것이다 :

private static final Map<Class<?>, EnumConverter<? extends Enum<?>>> 

하지만 내 팩토리 메소드에서이 Map에서 값을 반환하려고하면 오류가 발생합니다 :

Type mismatch: cannot convert from EnumConverter<capture#1-of ? extends Enum<?>> to EnumConverter<T>

어떤 아이디어 ?

답변

2

맵에 다른 하위 유형을 저장하려는 경우 컴파일러는 수신중인 실제 하위 유형을 알 수 없습니다. 캐스팅을 추가해야한다고 생각합니다.

public static <T extends Enum<?>> EnumConverter<T> getInstance(Class<T> enumClass) { 
    return (EnumConverter<T>) cache.get(enumClass); 
} 
+0

감사합니다. 그러나 나는 여전히 경고를 받는다 :'타입 안전 : EnumConverter의 체크되지 않은 캐스트 <3 번 캡처? Enum >을 EnumConverter '으로 확장합니다. 하지만 이것은 유형 삭제로 인해 해결할 수 없을 가능성이 있습니까? – hakos

+0

대답은 실제로'@SuppressWarnings ("unchecked")'입니다 : http://stackoverflow.com/questions/262367/type-safety-unchecked-cast – hakos

관련 문제