¿La mejor manera de crear una enumeración de cadenas?

Resuelto Dori asked hace 14 años • 8 respuestas

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

Probé esto:

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

¿ Cómo puedo entonces usarlos como Strings?

Dori avatar Oct 20 '10 20:10 Dori
Aceptado

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 hacerStrings.STRING_ONE.toString();

Buhake Sindi avatar Oct 20 '2010 14:10 Buhake Sindi

Valores de cadena personalizados para enumeración

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

El valor de cadena predeterminado para la enumeración de Java 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
vaichidrewar avatar Nov 22 '2012 22:11 vaichidrewar

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.

Bart Kiers avatar Oct 20 '2010 14:10 Bart Kiers

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.

Adrian Smith avatar Oct 20 '2010 14:10 Adrian Smith

Dependiendo de lo que quiera decir con "úselos 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 te 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 necesites cadenas (por ejemplo STRING_ONE.toLowerCase()), es posible que prefieras definirlas como constantes:

public interface Strings{
  public static final String STRING_ONE = "ONE";
  public static final String STRING_TWO = "TWO";      
}
hd42 avatar Oct 20 '2010 17:10 hd42