Quelle est la meilleure façon d’avoir un type enum
représenter un ensemble de chaînes?
J’ai essayé ceci:
enum Ssortingngs{ STRING_ONE("ONE"), STRING_TWO("TWO") }
Comment puis-je les utiliser comme Ssortingngs
?
Je ne sais pas ce que vous voulez faire, mais voici comment j’ai traduit votre exemple de code.
/** * */ package test; /** * @author The Elite Gentleman * */ public enum Ssortingngs { STRING_ONE("ONE"), STRING_TWO("TWO") ; private final Ssortingng text; /** * @param text */ Ssortingngs(final Ssortingng text) { this.text = text; } /* (non-Javadoc) * @see java.lang.Enum#toSsortingng() */ @Override public Ssortingng toSsortingng() { return text; } }
Vous pouvez également créer une méthode getter pour le text
.
Vous pouvez maintenant faire Ssortingngs.STRING_ONE.toSsortingng();
Valeurs de chaîne personnalisées pour Enum
de http://javahowto.blogspot.com/2006/10/custom-ssortingng-values-for-enum.html
La valeur de chaîne par défaut pour java enum est sa valeur faciale ou le nom de l’élément. Cependant, vous pouvez personnaliser la valeur de la chaîne en substituant la méthode toSsortingng (). Par exemple,
public enum MyType { ONE { public Ssortingng toSsortingng() { return "this is one"; } }, TWO { public Ssortingng toSsortingng() { return "this is two"; } } }
L’exécution du code de test suivant produira ceci:
public class EnumTest { public static void main(Ssortingng[] args) { System.out.println(MyType.ONE); System.out.println(MyType.TWO); } } this is one this is two
Utilisez sa méthode name()
:
public class Main { public static void main(Ssortingng[] args) throws Exception { System.out.println(Ssortingngs.ONE.name()); } } enum Ssortingngs { ONE, TWO, THREE }
donne ONE
.
Définissez le nom de l’enum sur la même valeur que la chaîne de votre choix ou, plus généralement, vous pouvez associer des atsortingbuts arbitraires à vos valeurs d’énumération:
enum Ssortingngs { STRING_ONE("ONE"), STRING_TWO("TWO"); private final Ssortingng ssortingngValue; Ssortingngs(final Ssortingng s) { ssortingngValue = s; } public Ssortingng toSsortingng() { return ssortingngValue; } // further methods, atsortingbutes, etc. }
Il est important d’avoir les constantes en haut et les méthodes / atsortingbuts en bas.
Selon ce que vous entendez par “utilisez-les comme des chaînes”, vous ne voudrez peut-être pas utiliser une énumération ici. Dans la plupart des cas, la solution proposée par The Elite Gentleman vous permettra de les utiliser via leurs méthodes toSsortingng, par exemple dans System.out.println(STRING_ONE)
ou Ssortingng s = "Hello "+STRING_TWO
, mais lorsque vous avez vraiment besoin de chaînes ( Par exemple, STRING_ONE.toLowerCase()
), vous pouvez préférer les définir comme des constantes:
public interface Ssortingngs{ public static final Ssortingng STRING_ONE = "ONE"; public static final Ssortingng STRING_TWO = "TWO"; }
Si vous ne voulez pas utiliser de constructeurs et que vous voulez avoir un nom spécial pour la méthode, essayez ceci:
public enum MyType { ONE { public Ssortingng getDescription() { return "this is one"; } }, TWO { public Ssortingng getDescription() { return "this is two"; } }; public abstract Ssortingng getDescription(); }
Je pense que c’est la solution la plus rapide . Il n’est pas nécessaire d’utiliser des variables finales .
Vous pouvez l’utiliser pour ssortingng Enum
public enum EnumTest { NAME_ONE("Name 1"), NAME_TWO("Name 2"); private final Ssortingng name; /** * @param name */ private EnumTest(final Ssortingng name) { this.name = name; } public Ssortingng getName() { return name; }
}
Et appel de la méthode principale
test de classe publique {
public static void main (Ssortingng args[]){ System.out.println(EnumTest.NAME_ONE.getName()); System.out.println(EnumTest.NAME_TWO.getName()); }
}