Vous pouvez utiliser une carte statique dans votre enum qui fait correspondre les chaînes de caractères aux constantes de l'enum. Utilisez-la dans une méthode statique 'getEnum'. Ainsi, il n'est pas nécessaire d'itérer à travers les enums chaque fois que vous voulez en obtenir un à partir de sa valeur String.
public enum RandomEnum {
StartHere("Start Here"),
StopHere("Stop Here");
private final String strVal;
private RandomEnum(String strVal) {
this.strVal = strVal;
}
public static RandomEnum getEnum(String strVal) {
if(!strValMap.containsKey(strVal)) {
throw new IllegalArgumentException("Unknown String Value: " + strVal);
}
return strValMap.get(strVal);
}
private static final Map<String, RandomEnum> strValMap;
static {
final Map<String, RandomEnum> tmpMap = Maps.newHashMap();
for(final RandomEnum en : RandomEnum.values()) {
tmpMap.put(en.strVal, en);
}
strValMap = ImmutableMap.copyOf(tmpMap);
}
@Override
public String toString() {
return strVal;
}
}
Assurez-vous simplement que l'initialisation statique de la carte a lieu après la déclaration des constantes de l'enum.
À propos, le type " ImmutableMap " provient de l'API Google Guava et je le recommande vivement dans des cas comme celui-ci.
EDIT - Selon les commentaires :
- Cette solution suppose que chaque valeur de chaîne attribuée est unique et non nulle. Étant donné que le créateur de l'enum peut contrôler cela, et que la chaîne de caractères correspond à la valeur unique et non nulle de l'enum, cela semble être une restriction sûre.
- J'ai ajouté la méthode "toSTring()" comme demandé dans la question.
2 votes
Ajoutez la balise "Java" pour obtenir plus de commentaires/réponses.
0 votes
Duplicata possible de Implémentation de toString sur les enums Java