Les autres réponses concernant l'utilisation de valueOf(string) sont justes, mais j'ajouterais que vous devriez protéger votre code contre la possibilité qu'une chaîne non valide soit transmise. Bien qu'aujourd'hui votre code ne transmette que des chaînes correspondant à des valeurs d'énumération valides, il est possible qu'une modification future de l'énumération ou une modification future d'autres parties de votre code (ou d'un code écrit par d'autres) rompe cette hypothèse.
Cela sera important dans des cas tels que l'écriture d'un setter pour une variable membre d'un enum d'une classe. Votre classe et son setter doivent se protéger eux-mêmes.
En JavaDocs pour Enum montrent qu'une exception pourrait être levée sur ce point ( IllegalArgumentException ou NullPointerException . Vous devez les traiter soit de manière générique, soit de manière spécifique. Les JavaDocs montrent également que cette fonction n'aime pas les "espaces blancs superflus" ... il faut donc envisager d'utiliser trim().
Je traiterais probablement les exceptions de manière générique, comme suit :
Enum BestEnumEver {OPTION_A, OPTION_B, OPTION_C}
// ... elsewhere in your code ...
// How confident are you that stringVar will have an acceptable value?
// How confident are you that the existing enum options will not need to change?
BestEnumEver enumValue;
try {
// Consider using trim to eliminate extraneous whitespace
enumValue = BestEnumEver.valueOf(stringVar.trim());
} catch (Exception e) {
// handle the situation here. Here are a couple of ideas.
// Apply null and expect the using code to detect.
enumValue = null;
// Have a defined private constant for a default value
// assuming a default value would make more sense than null
enumValue = DEFAULT_BEST_ENUM_EVER;
}
Mais vous pouvez aussi traiter chaque exception d'une manière unique.
Enum BestEnumEver {OPTION_A, OPTION_B, OPTION_C}
// ... elsewhere in your code ...
// How confident are you that stringVar will have an acceptable value?
// How confident are you that the existing enum options will not need to change?
BestEnumEver enumValue;
try {
// Consider using trim to eliminate extraneous whitespace
enumValue = BestEnumEver.valueOf(stringVar.trim());
} catch (IllegalArgumentException e1) {
// handle the situation here ...
} catch (NullPointerException e2) {
// handle the situation here ...
}