Der beste Weg, Enum von Strings zu erstellen?

Was ist der beste Weg, um einen enum Typ eine Reihe von Strings darstellen?

Ich habe es versucht:

 enum Strings{ STRING_ONE("ONE"), STRING_TWO("TWO") } 

Wie kann ich sie dann als Strings ?

Ich weiß nicht, was du machen willst, aber so habe ich deinen Beispielcode übersetzt …

 /** * */ 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; } } 

Alternativ können Sie eine Getter-Methode für text erstellen.

Sie können jetzt Strings.STRING_ONE.toString();

Benutzerdefinierte Zeichenfolgewerte für Enum

von http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html

Der Standardzeichenfolgenwert für Java Enum ist der Wert face oder der Elementname. Sie können den Zeichenfolgenwert jedoch anpassen, indem Sie die toString () -Methode überschreiben. Beispielsweise,

 public enum MyType { ONE { public String toString() { return "this is one"; } }, TWO { public String toString() { return "this is two"; } } } 

Das Ausführen des folgenden Testcodes wird das erzeugen:

 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 

Verwenden Sie die name() -Methode:

 public class Main { public static void main(String[] args) throws Exception { System.out.println(Strings.ONE.name()); } } enum Strings { ONE, TWO, THREE } 

ergibt ONE .

Legen Sie den Namen des Aufzählungszeichens so fest, dass er mit dem gewünschten übereinstimmt, oder allgemeiner: Sie können den Aufzählungswerten beliebige Attribute zuordnen:

 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. } 

Es ist wichtig, dass die Konstanten oben und die Methoden / Attribute unten stehen.

Je nachdem, was Sie unter “sie als Strings verwenden” verstehen, möchten Sie hier möglicherweise keine Aufzählung verwenden. In den meisten Fällen erlaubt Ihnen die von The Elite Gentleman vorgeschlagene Lösung, sie über ihre toString-Methoden zu verwenden, zB in System.out.println(STRING_ONE) oder String s = "Hello "+STRING_TWO , aber wenn Sie wirklich Strings benötigen ( zB STRING_ONE.toLowerCase() ), möchten Sie sie lieber als Konstanten definieren:

 public interface Strings{ public static final String STRING_ONE = "ONE"; public static final String STRING_TWO = "TWO"; } 

Wenn Sie keine Konstruktoren verwenden möchten und einen speziellen Namen für die Methode haben möchten, versuchen Sie Folgendes:

 public enum MyType { ONE { public String getDescription() { return "this is one"; } }, TWO { public String getDescription() { return "this is two"; } }; public abstract String getDescription(); } 

Ich vermute, dass dies die schnellste Lösung ist. Es ist nicht notwendig, letzte Variablen zu verwenden.

Sie können das für die Zeichenfolge Enum verwenden

 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; } 

}

Und ruf von der Hauptmethode an

Öffentliche class Test {

 public static void main (String args[]){ System.out.println(EnumTest.NAME_ONE.getName()); System.out.println(EnumTest.NAME_TWO.getName()); } 

}