¿Cuál es la mejor manera de tener un enum tipo representa un conjunto de cadenas?

Intenté esto:

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

¿Cómo puedo usarlos como Strings?

No sé qué quieres hacer, pero así es como 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 puedes hacer Strings.STRING_ONE.toString();

10

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

5

Utilice su name() método:

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

enum Strings {
    ONE, TWO, THREE
}

rendimientos ONE.

5

Configure el nombre de la enumeración para que sea el mismo que la cadena que desea o, de manera más general, puede asociar atributos arbitrarios con sus valores de enumeración:

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.

2

Dependiendo de lo que quiera decir con «usarlos como cadenas», es posible que no desee usar 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 necesita Strings (p. ej. STRING_ONE.toLowerCase()), es posible que prefiera definirlas como constantes:

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

10

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

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

Si tu no quiere usar constructoresy quieres tener un nombre especial para el método, pruébalo así:

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 este es el mas rapido solución. No hay necesidad de usar variables finales.

2

Obtenga y establezca los valores predeterminados.

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

1

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas