5 ответов:
перечисления Java не похожи на перечисления C или C++, которые на самом деле являются просто метками для целых чисел.
перечисления Java реализованы больше как классы-и они могут даже иметь несколько атрибутов.
public enum Ids { OPEN(100), CLOSE(200); private final int id; Ids(int id) { this.id = id; } public int getValue() { return id; } }большая разница в том, что они type-safe это означает, что вам не нужно беспокоиться о назначении цветового перечисления переменной размера.
см.http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html для большего.
да. Вы можете передать числовые значения конструктору для перечисления, например:
enum Ids { OPEN(100), CLOSE(200); private int value; private Ids(int value) { this.value = value; } public int getValue() { return value; } }посмотреть Sun Java Language Guide для получения дополнительной информации.
что об использовании этого способа:
public enum HL_COLORS{ YELLOW, ORANGE; public int getColorValue() { switch (this) { case YELLOW: return 0xffffff00; case ORANGE: return 0xffffa500; default://YELLOW return 0xffffff00; } } }есть только один способ ..
вы можете использовать статический метод и передать перечисление в качестве параметра например:
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; } }обратите внимание, что эти два способа используют меньше памяти и больше процессоров .. Я не говорю, что это лучший способ, но это просто другой подход.
Если вы используете очень большие типы перечисления, то может быть полезно следующее;
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; } }
Если вы хотите эмулировать перечисление C / C++ (базовый num и nexts incrementals):
enum ids { OPEN, CLOSE; // private static final int BASE_ORDINAL = 100; public int getCode() { return ordinal() + BASE_ORDINAL; } }; public class TestEnum { public static void main (String... args){ for (ids i : new ids[] { ids.OPEN, ids.CLOSE }) { System.out.println(i.toString() + " " + i.ordinal() + " " + i.getCode()); } } }OPEN 0 100 CLOSE 1 101
Comments