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