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