Je fais référence au paradigme de l'article 34 dans Effective Java de Joshua Bloch. Je voudrais prendre la méthode qu'il utilise pour que chaque enum
associé implémente une interface de base, et initialise un EnumMap
à partir des "sous-enums". Voir la section du code ci-dessous. Je reçois une erreur de syntaxe que je ne comprends pas. Je ne suis pas mis sur cette méthode de mise en œuvre, mais je voudrais comprendre pourquoi cela ne fonctionnera pas.Existe-t-il un moyen de stocker des «enonces extensibles» dans un EnumMap?
Notez que cet exemple suppose que chaque définition de classe se trouve dans son propre fichier.
public interface BaseEnum {
...
}
public enum EnumOps1 implements BaseEnum {
...
}
public class Widget {
public Widget() {
regMap = new EnumMap<EnumOps1, WidgetData>(EnumOps1.class);
for (EnumOps1 op : EnumOps1.values()) {
regMap.put(op, getWidgetData(op.key())); // line with syntax error
}
}
protected Map<? extends BaseEnum, WidgetData> regMap;
}
Syntaxe détail d'erreur:
method put in interface java.util.Map
<K,V>
cannot be applied to given types
required: capture#1 of ? extends BaseEnum, WidgetData
found: EnumOps1, WidgetData
Lorsque je tente cette déclaration et instanciation, je reçois une autre erreur de syntaxe: paramètre de type BaseEnum pas dans sa limite. Cette erreur est sur la ligne d'instanciation (regMap = ...) Des idées? – stever
Je suis d'accord avec l'exactitude de votre réponse. Cependant, il n'est pas tout à fait clair pourquoi cette ligne particulière jette l'erreur. Dans tous les cas où l'EnumMap est instanciée ou appelée, une énumération lui est transmise. Je m'excuse si je manque quelque chose d'évident. – stever
Désolé, postez le code exact que vous essayez maintenant? –