Java列舉方法


因為列舉型別實際上是一個類,所以可在列舉型別體中宣告一切,也可在類體中宣告它。
以下程式碼使用欄位,建構函式和方法定義了一個名為 Level 的列舉。

public enum Level {
  LOW(30), MEDIUM(15), HIGH(7), URGENT(1);

  // Declare an instance variable
  private int levelValue;

  // Declare a private constructor
  private Level(int levelValue) {
    this.levelValue = levelValue;
  }

  public int getLevelValue() {
    return levelValue;
  }
}

上面的程式碼宣告了一個範例變數levelValue,它將為每個列舉常數儲存一個值。它還定義了一個私有建構函式,它接受一個int引數。 它將其引數的值儲存在範例變數中。
可以向列舉型別新增多個建構函式。但不能向列舉型別新增公共或受保護的建構函式。

Level列舉中宣告一個公共方法getLevelValue()。列舉常數宣告已更改為 -

LOW(30), MEDIUM(15),  HIGH(7),  URGENT(1);

現在每個列舉常數名稱後面都跟著括號中的整數值。LOW(30)是呼叫int引數型別的建構函式的縮寫。當建立列舉常數時,括號中的值將被傳遞給新增的建構函式。LOW呼叫預設的無引數建構函式,而LOW(30)呼叫有引數的建構函式。

範例

以下程式碼測試Level列舉型別。它列印常數的名稱,序數值和它們的下劃線值。

enum Level {
  LOW(30), MEDIUM(15), HIGH(7), URGENT(1);

  // Declare an instance variable
  private int levelValue;

  // Declare a private constructor
  private Level(int levelValue) {
    this.levelValue = levelValue;
  }

  public int getLevelValue() {
    return levelValue;
  }
}

public class Main {
  public static void main(String[] args) {
    for (Level s : Level.values()) {
      String name = s.name();
      int ordinal = s.ordinal();
      int underLine = s.getLevelValue();
      System.out.println("name=" + name + ",  ordinal=" + ordinal + ", underLine="
          + underLine);
    }
  }
}

上面的程式碼生成以下結果。

name=LOW,  ordinal=0, underLine=30
name=MEDIUM,  ordinal=1, underLine=15
name=HIGH,  ordinal=2, underLine=7
name=URGENT,  ordinal=3, underLine=1