Comment convertir une chaîne de enum avec substituée toString() retour à la enum?
Le suivant java enum:
public enum AgeRange {
A18TO23 {
public String toString() {
return "18 - 23";
}
},
A24TO29 {
public String toString() {
return "24 - 29";
}
},
A30TO35 {
public String toString() {
return "30 - 35";
}
},
}
Est-il un moyen de convertir une chaîne de valeur "18 - 23" à la correspondante de la valeur d'enum c'est à dire AgeRange.A18TO23 ?
Merci!
Vous devez vous connecter pour publier un commentaire.
La meilleure et la plus simple façon de le faire est comme ceci:
Ensuite, vous avez juste besoin d'invoquer la
getByValue()
méthode avec leString
entrée à elle.getByValue(String)
, ne devriez-vous pas simplement déléguer à l'enum inhérentevalueOf(String)
? référence: stackoverflow.com/questions/11914792/...Vous pouvez toujours créer une map à partir de la chaîne de valeur - le faire de manière statique de sorte que vous ne devez mapper une fois, en supposant que la chaîne renvoyée reste le même au fil du temps. Il n'y a rien construit-en autant que je suis au courant.
Selon effective java (2e ed) à l'article 30, il peut être (c'est beaucoup plus rapide que la boucle)
Ou quelque chose comme ça? Juste tapé dans l', n'est-ce pas courir à travers un compilateur. Pardonner (commenter) les fautes de frappe...
Ou utiliser la logique de ce genre pour construire une carte une fois. Éviter itération lors de l'exécution. Bonne idée, Jon.
La classe substitue "toString()" - donc, pour l'opération inverse, vous avez besoin de remplacer
valueOf()
de traduire la sortie detoString()
retour aux valeurs Enum.Acheteur méfiez - vous- non et non...
Le mécanisme de
toString()
etvalueOf()
est un cas documenté d'une partie de la APIvalueOf()
est statique, et d'aucune utilité dans le corps d'une valeur d'enum. Et même une fois que tout cela est fixe, le "corriger" la mise en œuvre serait, à tort, que le compilateur ne permettent pas à une statique de remplacement surstatic public valueOf(String)
. La commune de fix est tout simplement de ne pas utiliservalueOf
- utiliser un nom différent.Vous pouvez essayer quelque chose comme?
Ou, comme d'autres l'ont suggéré, à l'aide d'une approche de mise en cache: