Quel est le meilleur moyen d’avoir un type enum
représentant un ensemble de chaînes?
J'ai essayé ceci:
enum Strings{
STRING_ONE("ONE"), STRING_TWO("TWO")
}
Comment puis-je les utiliser comme Strings
?
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 Strings {
STRING_ONE("ONE"),
STRING_TWO("TWO")
;
private final String text;
/**
* @param text
*/
Strings(final String text) {
this.text = text;
}
/* (non-Javadoc)
* @see Java.lang.Enum#toString()
*/
@Override
public String toString() {
return text;
}
}
Vous pouvez également créer une méthode d'accesseur en lecture pour text
.
Vous pouvez maintenant faire Strings.STRING_ONE.toString();
Valeurs de chaîne personnalisées pour Enum
from http://javahowto.blogspot.com/2006/10/custom-string-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 chaîne en remplaçant la méthode toString (). Par exemple,
public enum MyType {
ONE {
public String toString() {
return "this is one";
}
},
TWO {
public String toString() {
return "this is two";
}
}
}
L'exécution du code de test suivant produira ceci:
public class EnumTest {
public static void main(String[] 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(String[] args) throws Exception {
System.out.println(Strings.ONE.name());
}
}
enum Strings {
ONE, TWO, THREE
}
donne ONE
.
Définissez le nom enum sur la même chaîne que vous le souhaitez ou, plus généralement, associez des attributs arbitraires à vos valeurs enum:
enum Strings {
STRING_ONE("ONE"), STRING_TWO("TWO");
private final String stringValue;
Strings(final String s) { stringValue = s; }
public String toString() { return stringValue; }
// further methods, attributes, etc.
}
Il est important d’avoir les constantes en haut et les méthodes/attributs 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 toString, par exemple. dans System.out.println(STRING_ONE)
ou String 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 en tant que constantes:
public interface Strings{
public static final String STRING_ONE = "ONE";
public static final String STRING_TWO = "TWO";
}
Vous pouvez l'utiliser pour la chaîne Enum
public enum EnumTest {
NAME_ONE("Name 1"),
NAME_TWO("Name 2");
private final String name;
/**
* @param name
*/
private EnumTest(final String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Et appel de la méthode principale
public class Test {
public static void main (String args[]){
System.out.println(EnumTest.NAME_ONE.getName());
System.out.println(EnumTest.NAME_TWO.getName());
}
}
Si vous ne pas voulez utiliser constructeurs, et que vous voulez avoir un nom spécial pour la méthode, essayez ceci:
public enum MyType {
ONE {
public String getDescription() {
return "this is one";
}
},
TWO {
public String getDescription() {
return "this is two";
}
};
public abstract String getDescription();
}
Je soupçonne que c'est la la plus rapide solution. Il n'y a pas besoin d'utiliser variables final.
Obtenir et définir avec des valeurs par défaut.
public enum Status {
STATUS_A("Status A"), STATUS_B("Status B"),
private String status;
Status(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
}