2011-01-23 12 views
8

Mam pytanie dotyczące leków generycznych. Mam tę metodę, która nie kompiluje się w ogóle. Kompilator mówi mi: type parameter E is not within its bound. Zwykle nie mam problemu ze zrozumieniem błędów kompilatora, ale ten jest dość trudny. Może moja wiedza na temat leków generycznych wymaga poprawy. :-) Czy ktoś może mi powiedzieć, co jest nie tak?Java Generics Pytanie: typ parametru E nie jest w jego granicach

public static <E extends Enum & StringConvertableEnum<E>> Map<String, E> map(Class<E> enumClass) { 
    Map<String, E> mapping = new HashMap<String, E>(); 

    EnumSet<E> set = EnumSet.allOf(enumClass); 

    for(E enumConstant : set) { 
     mapping.put(enumConstant.getStringValue(), enumConstant); 
    } 

    return mapping; 
} 

To jest definicja StringConvertableEnum:

public interface StringConvertableEnum<E extends Enum> { 
    public E getEnumFromStringValue(String string); 
    public String getStringValue(); 
} 
+0

numer linii na który narzeka? – bmargulies

+0

@bmargulies: EnumSet zestaw = EnumSet.allOf (enumClass); jest linia. – Kraushauslaus

+0

Jestem poza moją głębią. Twój kod wygląda na wiarygodny. – bmargulies

Odpowiedz

9

Musisz zmienić swoją deklarację E extends Enum<E>

Edytuj, przepraszam musiała odejść, pełna deklaracja Znaczy to:

public static <E extends Enum<E> & StringConvertableEnum<E>> Map<String, E> map(Class<E> enumClass) { 
+0

i) To pozwoliłoby na przejście do wyliczenia bez metody getStringValue(), która jest obowiązkowa. ii) też się nie kompiluje, nawet jeśli usunięto ciało pętli for, w której użyto metody 'getStringValue()'. – Kraushauslaus

+0

@Kraushauslaus: oznacza zmianę 'E rozszerza Enum' na' E extends Enum ': możesz zachować część' StringConvertableEnum '. –

+1

@Kraushauslaus Wierzę, że @Yishai oznacza wstawianie '' w obu deklaracjach i nie usuwaj niczego. Kompiluje się dla mnie. –

Powiązane problemy