2011-09-06 4 views
0

java로 클래스를 개발하고 싶습니다.enumset을 사용하여 제네릭 클래스의 생성자에 문제가 발생했습니다.

public class EnumSetPlus<E extends Enum<E>> { 

//Map 
private EnumSet<E> map; 

//Constructor 
public EnumSetPlus(){ 

} 

내가 EnumSet.noneOf(E.class)와지도를 inicializate하고 싶지만 생성자가 오류를 제공합니다 : 문제는 생성자 클래스는 이것이다

작동하지 않는다는 것입니다.

생성자가 잘못 되었습니까? 생성자없이 변수 맵을 초기화 할 수 있습니까?

변수 컨텍스트에서 public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E)을 시도했지만 작동하지 않습니다.

나는 map = EnumSet.noneOf(E.class)도 생성자에 시도했지만 둘 다 작동하지 않습니다.

나는 그것을 구문 또는 방법 당신이 나를 도울 수

에 문제가 있다고 생각?

미리 감사드립니다.

+1

어떤 오류가 발생 했습니까? 보통 도움이되는 메시지가 있습니다. – Thilo

답변

3

문제는 E 또는 E.class을 사용하여 수행 할 수없는 E의 클래스 인스턴스가 필요하다는 것입니다. 시도한 후 생성자 매개 변수로 Class<E>을 제공하여 매개 변수화 된 enum 클래스를 클래스에 알립니다.

이 작동합니다 :

public EnumSetPlus(Class<E> clazz){ 
    map = EnumSet.noneOf(clazz); 
} 

문제는 컴파일러가 실제로 (그것이 열거 형하는) 어떤 유형 E 알고하지 않는다는 것입니다, 따라서 컴파일 타임에 클래스를 확인할 수 없습니다. 제안 된 매개 변수를 사용하거나 EnumSetPlus을 하위 클래스로 지정하여 런타임시 해당 정보를 사용할 수 있도록해야합니다. 구체적인 유형 매개 변수는 리플렉션을 사용하여 결정할 수 있습니다. 리플렉션 접근법은 간단한 경우에 과도 할 것이므로 매개 변수 접근 방식을 시도하는 것이 좋습니다.