Java枚舉類型
枚舉類型是什麼?
枚舉類型創建常量的有序列表作爲類型。它以特定順序指定常量。在枚舉類型中定義的常量是該枚舉類型的實例。
語法
使用關鍵字enum
定義枚舉類型,語法以下:
<access-modifier> enum <enum-type-name> {
// List of comma separated names of enum constants
}
<access-modifiers>
與類的訪問修飾符相同:public
,private
,protected
或package-level
。
<enum-type-name>
是有效的Java
標識符。枚舉類型的主體放在大括號中,名稱後面。主體可以有逗號分隔的常數和其他元素的列表,例如實例變量,方法等。
在大多數情況下,枚舉體只包括常量。
示例
以下代碼聲明瞭一個名爲Gender
的枚舉類型,它聲明瞭兩個常量:MALE
和FEMALE
:
public enum Gender {
MALE, FEMALE; // The semi-colon is optional
}
將枚舉常量命名爲大寫是一種慣例。以下代碼聲明瞭一個名爲Level
的公共枚舉類型,它具有四個枚舉常量:LOW
,MEDIUM
,HIGH
和URGENT
。
public enum Level {
LOW, MEDIUM, HIGH, URGENT;
}
可以從應用程序中的任何位置訪問公共枚舉類型。公共枚舉類型保留在具有枚舉類型名稱的文件中。 級別枚舉將保存在名爲Level.java
的文件中。
需要在包中放置枚舉類型,使用import
語句來導入枚舉類型。
枚舉變量
聲明枚舉類型的變量,就像聲明類的變量一樣。以下代碼聲明Level
枚舉類型的errorLevel
變量,如下代碼所示 -
Level errorLevel;
可以爲枚舉類型變量分配null
值,如下所示:
Level defectLevel = null;
在 switch 語句中使用枚舉類型
可以在switch
語句中使用枚舉類型。當switch
表達式是枚舉類型時,所有case
標籤必須是同一枚舉類型的枚舉常量。
enum Direction {
East, South, West, North
}
public class Main {
public static void main(String args[]) {
Direction dir = Direction.South;
switch (dir) {
case South:
System.out.println("south");
break;
case East:
System.out.println("East");
break;
case West:
System.out.println("West");
break;
case North:
System.out.println("North.");
break;
}
}
}
上面的代碼生成以下結果。
south
嵌套枚舉類型
可以在類,接口或另一個枚舉類型中有一個嵌套的枚舉類型聲明。嵌套枚舉類型是隱式靜態的。 因爲枚舉類型總是靜態的,所以不能在方法體內聲明一個局部枚舉類型。
對於嵌套枚舉類型,可以使用任何訪問修飾符(public
,private
,protected
或 package
)級別。
以下代碼顯示瞭如何在Person
類中聲明名爲Gender
的嵌套公共枚舉類型。
class Person {
public enum Gender {
MALE, FEMALE
}
}
public class Main {
public static void main(String[] args) {
Person.Gender m = Person.Gender.MALE;
Person.Gender f = Person.Gender.FEMALE;
System.out.println(m);
System.out.println(f);
}
}
Person.Gender
枚舉類型可以從應用程序中的任何位置訪問,因爲它已被聲明爲public
。也可以通過使用靜態導入導入枚舉常量來使用枚舉常量的簡單名稱。
import static com.java2s.enums.Person.Gender.*;
枚舉類型實現接口
枚舉類型可以實現接口。枚舉類型實現接口的規則與實現接口的類的規則相同。
下面的代碼演示瞭如何讓枚舉類型實現一個接口。
interface Command {
void execute();
}
enum Level implements Command {
LOW {
public void execute() {
System.out.println("Low...");
}
},
HIGH {
public void execute() {
System.out.println("HIGH...");
}
};
public abstract void execute();
}
public class Main {
public static void main(String... args) {
for (Command cmd : Level.values()) {
cmd.execute();
}
}
}
上面的代碼生成以下結果。
Low...
HIGH...