硬舉膝蓋 - 我可以在Java中設置枚舉啟動值嗎?




蹲舉 (4)

我使用枚舉來創建一些常量:

enum ids {OPEN, CLOSE};

OPEN值為零,但我希望它為100.可能嗎?


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; }
}

最大的區別是它們是類型安全的 ,這意味著您不必擔心將COLOR枚舉分配給SIZE變量。

有關更多信息,請參閱http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html


如果你使用非常大的枚舉類型,那麼以下是有用的;

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;
    }
}

是。 您可以將數值傳遞給枚舉的構造函數,如下所示:

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

  private int value;    

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

  public int getValue() {
    return value;
  }
}

有關更多信息,請參閱“ Sun Java語言指南”


有什麼關於使用這種方式:

public enum HL_COLORS{
          YELLOW,
          ORANGE;

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

只有一種方法..

你可以使用靜態方法並將Enum作為參數傳遞,如下所示:

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;
            }
          }

請注意,這兩種方式使用更少的內存和更多的流程單元。我不認為這是最好的方式,但它只是另一種方法。





enums