¿Puedo establecer el valor inicial de enumeración en Java?

Resuelto qrtt1 asked hace 15 años • 9 respuestas

Utilizo la enumeración para hacer algunas constantes:

enum ids {OPEN, CLOSE};

el valor OPEN es cero, pero lo quiero como 100. ¿Es posible?

qrtt1 avatar Jul 01 '09 12:07 qrtt1
Aceptado

Las enumeraciones de Java no son como las enumeraciones de C o C++, que en realidad son solo etiquetas para números enteros.

Las enumeraciones de Java se implementan más como clases, e incluso pueden tener múltiples atributos.

public enum Ids {
    OPEN(100), CLOSE(200);

    private final int id;
    Ids(int id) { this.id = id; }
    public int getValue() { return id; }
}

La gran diferencia es que son seguros para escribir, lo que significa que no tiene que preocuparse por asignar una enumeración COLOR a una variable TAMAÑO.

Consulte http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html para obtener más información.

lavinio avatar Jul 01 '2009 05:07 lavinio

Sí. Puedes pasar los valores numéricos al constructor de la enumeración, así:

enum Ids {
  OPEN(100),
  CLOSE(200);

  private int value;    

  private Ids(int value) {
    this.value = value;
  }

  public int getValue() {
    return value;
  }
}

Consulte la Guía del lenguaje Sun Java para obtener más información.

Paul Morie avatar Jul 01 '2009 05:07 Paul Morie

¿Qué hay de usar de esta manera?

public enum HL_COLORS{
          YELLOW,
          ORANGE;

          public int getColorValue() {
              switch (this) {
            case YELLOW:
                return 0xffffff00;
            case ORANGE:
                return 0xffffa500;    
            default://YELLOW
                return 0xffffff00;
            }
          }
}

solo hay un metodo..

puedes usar un método estático y pasar Enum como parámetro como:

public enum HL_COLORS{
          YELLOW,
          ORANGE;

          public static int getColorValue(HL_COLORS hl) {
              switch (hl) {
            case YELLOW:
                return 0xffffff00;
            case ORANGE:
                return 0xffffa500;    
            default://YELLOW
                return 0xffffff00;
            }
          }

Tenga en cuenta que estas dos formas utilizan menos memoria y más unidades de proceso. No digo que esta sea la mejor manera, pero es solo otro enfoque.

Maher Abuthraa avatar Oct 18 '2012 11:10 Maher Abuthraa

Si utiliza tipos de enumeración muy grandes, lo siguiente puede resultar útil;

public enum deneme {

    UPDATE, UPDATE_FAILED;

    private static Map<Integer, deneme> ss = new TreeMap<Integer,deneme>();
    private static final int START_VALUE = 100;
    private int value;

    static {
        for(int i=0;i<values().length;i++)
        {
            values()[i].value = START_VALUE + i;
            ss.put(values()[i].value, values()[i]);
        }
    }

    public static deneme fromInt(int i) {
        return ss.get(i);
    }

    public int value() {
    return value;
    }
}
serdar avatar Jul 10 '2011 10:07 serdar