Les valeurs dans my enum
sont des mots qui doivent contenir des espaces, mais les énumérations ne peuvent pas avoir d'espaces dans leurs valeurs, donc tout est groupé. Je veux remplacer toString()
pour ajouter ces espaces là où je le dis.
Je veux également que l'énumération fournisse l'énumération correcte lorsque j'utilise valueOf()
sur la même chaîne à laquelle j'ai ajouté les espaces.
Par exemple:
public enum RandomEnum
{
StartHere,
StopHere
}
Appel toString()
sur RandomEnum
dont la valeur est StartHere
renvoie la chaîne "Start Here"
. L'appel valueof()
sur cette même chaîne ( "Start Here"
) renvoie la valeur enum StartHere
.
Comment puis-je faire ceci?
Réponses:
Vous pouvez essayer ce code. Étant donné que vous ne pouvez pas remplacer la
valueOf
méthode, vous devez définir une méthode personnalisée (getEnum
dans l'exemple de code ci-dessous) qui renvoie la valeur dont vous avez besoin et modifiez votre client pour utiliser cette méthode à la place.la source
Essayez ceci, mais je ne suis pas sûr que cela fonctionnera partout :)
la source
Vous pouvez utiliser une carte statique dans votre énumération qui mappe des chaînes à des constantes d'énumération. Utilisez-le dans une méthode statique 'getEnum'. Cela évite d'avoir à parcourir les énumérations chaque fois que vous souhaitez en obtenir une à partir de sa valeur String.
Assurez-vous simplement que l'initialisation statique de la carte se produit sous la déclaration des constantes enum.
BTW - ce type 'ImmutableMap' provient de l'API Google guava, et je le recommande vivement dans des cas comme celui-ci.
EDIT - Par les commentaires:
la source
RestartHere("replay"), ReplayHere("replay")
ou aucune 'valeur' du tout commePauseHere, WaitHere
(c'est-à-dire que l'énumération a un constructeur par défaut quelque chose commeprivate RandomEnum() { this.strVal = null; }
Et une implémentation Java 8? (null peut être remplacé par votre Enum par défaut)
Ou vous pouvez utiliser:
la source
Je ne pense pas que vous allez faire fonctionner valueOf ("Start Here"). Mais en ce qui concerne les espaces ... essayez ce qui suit ...
la source
Ce qui suit est une belle alternative générique à valueOf ()
la source
compareTo()
plus élégante queequals()
pour les chaînes?.equals()
cela fonctionnerait bien. Pourrait utiliser==
si vous le souhaitez. (Bien qu'une bonne raison de ne pas le faire, c'est de remplacer l'énumération par une classe.)Vous avez toujours une option pour implémenter dans votre énumération ceci:
la source