¿Puedo establecer el valor inicial de enumeración en Java?
Utilizo la enumeración para hacer algunas constantes:
enum ids {OPEN, CLOSE};
el valor OPEN es cero, pero lo quiero como 100. ¿Es posible?
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.
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.
¿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.
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;
}
}