J'ai une carte dans laquelle j'ai besoin de valider le jeu de clés de la carte avec mon énumération. J'ai une classe enum comme indiqué ci-dessous:Une façon élégante de valider le jeu de clés d'une carte avec une énumération?
public enum Tag {
rename, duplicate, process, limit, encode, decode;
};
maintenant keyset
de carte doit avoir des valeurs de ENUM ci-dessus. Si mon jeu de clés contient une valeur qui n'est pas présente dans l'énumération, alors je veux lancer IllegalArgumentException
avec la valeur manquante dans mon énumération.
Ci-dessous mon code:
public Processor(Map<String, String> tasks) {
Set<String> keyset = tasks.keySet();
for (String tag : keyset)
checkArgument(!EnumUtils.isValidEnum(Tag.class, tag), "unknown tag found '%s'.", tag);
}
Comme vous pouvez le voir, je suis itérer keyset
et de faire Preconditions.checkArgument
chèque. Si ce n'est pas le cas, il lancera IllegalArgumentException
. Je suis sûr que le message de lancement peut être amélioré.
Ma question est: Y at-il une meilleure façon de faire la même chose par rapport à ce que je fais? Dois-je itérer le keyset
dans la boucle for pour faire le contrôle? ou Y a-t-il un seul paquebot ou un autre moyen de faire cette validation?
J'utilise Java7.
Si vous voulez que votre carte possède des clés de l'enum 'Tag', ce ne devrait pas être une' Map '. –
user2357112
Il suffit d'utiliser un 'Map'? Peut-être même un 'EnumMap'? –
chrylis