J'ai une classe EnumConverter<T extends Enum<?>>
qui convertit les chaînes à la constante enum correcte pour l'énumération T
(je ne peux pas utiliser Enum.valueOf
). Je construis des instances de cette classe dans une méthode de fabrication comme ceci:Méthode d'usine statique avec génériques
public static <T extends Enum<?>> EnumConverter<T> getInstance(Class<T> enumClass) {
return new EnumConverter<T>(enumClass.getEnumConstants());
}
Cela fonctionne, mais maintenant je veux mettre en cache EnumConverter
cas pour vous assurer qu'il n'y a qu'un seul par ENUM, soit avec un Map
, et mon problème est comment déclarer Map
. Le plus proche que je suis venu est ceci:
private static final Map<Class<?>, EnumConverter<? extends Enum<?>>>
Mais je reçois une erreur si je tente de retourner une valeur de ce Map
de ma méthode d'usine:
Type mismatch: cannot convert from EnumConverter<capture#1-of ? extends Enum<?>> to EnumConverter<T>
Toutes les idées ?
Merci, ça marche! Mais je reçois toujours un avertissement: 'sécurité Type: non contrôlé coulé à partir EnumConverter> pour EnumConverter '. Mais ce n'est probablement pas possible d'adresser en raison de l'effacement de type? –
hakos
La réponse est en effet '@SuppressWarnings ("non contrôlée")': http://stackoverflow.com/questions/262367/type-safety-unchecked-cast – hakos