Java Génériques Question: paramètre de type E n'est pas dans les limites
j'ai une question à propos de génériques. J'ai cette méthode qui ne compile pas. Le compilateur me dit: type parameter E is not within its bound
. J'ai généralement pas de problème dans la compréhension des erreurs de compilation, mais celui-ci est assez délicat. Peut-être que mes connaissances sur les génériques besoin de s'améliorer. 🙂 Quelqu'un peut-il me dire ce qui est mal?
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;
}
C'est la définition de StringConvertableEnum
:
public interface StringConvertableEnum<E extends Enum> {
public E getEnumFromStringValue(String string);
public String getStringValue();
}
numéro de ligne on se plaindre?
EnumSet<E> set = EnumSet.allOf(enumClass); est la ligne.
Je suis hors de ma profondeur. Votre code semble plausible pour moi.
par ailleurs, pourquoi auriez-vous besoin pour générer une telle carte? vous savez que chaque enum class a un
EnumSet<E> set = EnumSet.allOf(enumClass); est la ligne.
Je suis hors de ma profondeur. Votre code semble plausible pour moi.
par ailleurs, pourquoi auriez-vous besoin pour générer une telle carte? vous savez que chaque enum class a un
.valueOf()
méthode statique qui permet d'obtenir l'enum de sa chaîne, non?OriginalL'auteur Kraushauslaus | 2011-01-23
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de changer votre déclaration de
E extends Enum<E>
Edit, désolé dû prendre de la distance, l'intégralité de la déclaration je veux dire, c'est:
getStringValue()
méthode, qui est obligatoire. ii) il ne compile pas non plus, même si j'ai enlever le corps de la boucle où legetStringValue()
méthode est utilisée.il signifie un changement
E extends Enum
àE extends Enum<E>
: vous pouvez garder votreStringConvertableEnum<E>
partie.Je crois que @Yishai signifie insérer le
<E>
dans les deux déclarations et ne pas supprimer n'importe quoi. Compile pour moi.OriginalL'auteur Yishai