Tu ne peux pas. Je pense que vous avez QUATRE options ici. Tous les quatre offrent une solution mais avec une approche légèrement différente ...
Première option: utilisez la fonction intégrée name()
sur une énumération. C'est parfaitement bien si vous n'avez besoin d'aucun format de dénomination spécial.
String name = Modes.mode1.name(); // Returns the name of this enum constant, exactly as declared in its enum declaration.
Deuxième option: ajoutez des propriétés de substitution à vos énumérations si vous voulez plus de contrôle
public enum Modes {
mode1 ("Fancy Mode 1"),
mode2 ("Fancy Mode 2"),
mode3 ("Fancy Mode 3");
private final String name;
private Modes(String s) {
name = s;
}
public boolean equalsName(String otherName) {
// (otherName == null) check is not needed because name.equals(null) returns false
return name.equals(otherName);
}
public String toString() {
return this.name;
}
}
Troisième option: utilisez des finales statiques au lieu des énumérations:
public final class Modes {
public static final String MODE_1 = "Fancy Mode 1";
public static final String MODE_2 = "Fancy Mode 2";
public static final String MODE_3 = "Fancy Mode 3";
private Modes() { }
}
Option quatre: les interfaces ont tous les champs publics, statiques et finaux:
public interface Modes {
String MODE_1 = "Fancy Mode 1";
String MODE_2 = "Fancy Mode 2";
String MODE_3 = "Fancy Mode 3";
}
.name()
Voir: stackoverflow.com/a/6667365/887836Chaque énumération possède à la fois une méthode name () et valueOf (String). Le premier renvoie le nom de chaîne de l'énumération, et le second donne la valeur d'énumération dont le nom est la chaîne. C'est comme ça que vous cherchez?
Il y a aussi un valueOf statique (classe, chaîne) sur Enum lui-même, vous pouvez donc également utiliser
la source
some-really-long-string
.valueOf(String)
méthode en combinaison avectoUpperCase(Locale)
pour assurer la conversion des chaînes.Vous pouvez remplacer la
toString()
méthode pour chaque valeur d'énumération.Exemple:
Usage:
la source
Comme le mentionne Benny Neugebauer, vous pouvez remplacer le toString (). Cependant, au lieu de remplacer la chaîne toString pour chaque champ enum, j'aime plus quelque chose comme ceci:
Vous pouvez également ajouter une méthode statique pour récupérer tous les champs, pour les imprimer tous, etc. Appelez simplement getValue pour obtenir la chaîne associée à chaque élément Enum
la source
mode1.name()
ouString.valueOf(mode1)
. Ça ne va pas mieux que ça, j'ai peurla source
vous pouvez effectuer un appel comme ci-dessous où vous voulez obtenir la valeur sous forme de chaîne à partir de l'énumération.
Cela renverra "Mode1" sous forme de chaîne.
la source
Vous pouvez utiliser
Mode.mode1.name()
mais vous n'avez souvent pas besoin de le faire.la source
name()
ettoString()
peuvent être remplacés, mais j'espère que cela sera clair à la lecture du code pourenum
si cela se produit.name()
estfinal
. Merci de m'avoir corrigé. :)Pour autant que je sache, la seule façon d'obtenir le nom serait
Si vous en avez vraiment besoin de cette façon, cependant, vous pouvez faire:
la source
Mode.mode1
n'est toujours pas de typeString
.Pour mes énumérations, je n'aime pas vraiment penser qu'elles soient allouées avec 1 chaîne chacune. C'est ainsi que j'implémente une méthode toString () sur les énumérations.
la source
return
est redondant, car l'activation des énumérations avec toutes les énumérations se termine.Vous pouvez simplement utiliser:
la source
"" + Modes.mode1
. J'ai fixé la réponse''.join()
ma solution à votre problème!
la source
Enum est juste une classe un peu spéciale. Les énumérations peuvent stocker des champs supplémentaires, implémenter des méthodes, etc. Par exemple
Vous pouvez maintenant dire:
System.out.println(Modes.mode1.character())
et voir la sortie:
a
la source
la source
Cette méthode devrait fonctionner avec
enum
:la source
Il imprimera:
Cette conception pour les constantes de chaîne enum fonctionne dans la plupart des cas.
la source
après de nombreux essais, je suis venu avec cette solution
la source
Vous pouvez essayer ceci:
}
la source
j'ai trouvé que celui-ci est plus facile pour éviter les erreurs de type:
cependant - cela peut fonctionner lorsque vous devez utiliser une chaîne sur un journal / println ou chaque fois que java compile automatiquement la méthode toString (), mais sur une ligne de code comme celle-ci ->
à la place, comme mentionné ci-dessus, vous devrez toujours étendre l'énumération et l'utiliser
.name()
dans les cas comme celui-ci:la source