Могу ли я установить начальное значение enum в Java?



Я использую перечисление, чтобы сделать несколько констант:



enum ids {OPEN, CLOSE};


открытое значение равно нулю, но я хочу его как 100. Возможно ли это?

505   5  

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

    Ничего не найдено.