¿La mejor manera de crear una secuencia de cadenas?

¿Cuál es la mejor manera de que un tipo de enum represente un conjunto de cadenas?

Intenté esto:

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

¿Cómo puedo usarlos como Strings ?

No sé lo que quieres hacer, pero así es como realmente traduje tu código de ejemplo …

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

Alternativamente, puede crear un método getter para text .

Ahora puede hacer Strings.STRING_ONE.toString();

Valores de cadena personalizados para Enum

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

El valor de cadena predeterminado para Java Enum es su valor nominal o el nombre del elemento. Sin embargo, puede personalizar el valor de la cadena anulando el método toString (). Por ejemplo,

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

Ejecutar el siguiente código de prueba producirá esto:

 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 

Use su método name() :

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

rinde ONE .

Establezca el nombre de la enumeración para que sea el mismo que la cadena que desea o, de manera más general, puede asociar los atributos arbitrarios con sus valores 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. } 

Es importante tener las constantes en la parte superior y los métodos / atributos en la parte inferior.

Dependiendo de lo que quiere decir con “usarlos como cadenas”, es posible que no desee utilizar una enumeración aquí. En la mayoría de los casos, la solución propuesta por The Elite Gentleman le permitirá usarlos a través de sus métodos toString, por ejemplo, en System.out.println(STRING_ONE) o String s = "Hello "+STRING_TWO , pero cuando realmente necesite Strings ( ej. STRING_ONE.toLowerCase() ), quizás prefiera definirlos como constantes:

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

Si no desea usar constructores , y desea tener un nombre especial para el método, intente esto:

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

Sospecho que esta es la solución más rápida . No hay necesidad de usar variables finales .

Puedes usar eso para la cadena 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; } 

}

Y llamar desde el método principal

clase pública Test {

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

}