在Java 5.0版本之前,如果我們要實現枚舉類必須要通過其定義創建枚舉類。枚舉類的關鍵定義是:含有確定個數的實例。一般枚舉類的應用是定義確定數量的常量,或者創建一個單例類(當實例個數爲一個時)。當Java 5.0版本發行時,提供了enum關鍵字幫助我們創建枚舉類,同時還有一些額外的功能和使用技巧。
- 自定義枚舉類:
/**
* Java 5.0之前自定義寫法
*
* Enum Season class
*/
public class Season {
//因爲枚舉類含有確定的對象,所以我們把對象的屬性也設置爲常量
private final String name;
private final String description;
//構造器設置爲private
private Season(String name, String description){
this.name = name;
this.description = name;
}
public static final Season SPRING = new Season("Spring", "Now is spring.");
public static final Season SUMMER = new Season("Summer", "Now is summer.");
public static final Season AUTUMN = new Season("AUTUMN", "Now is autumn");
public static final Season WINTER = new Season("Winter", "Now is winter");
public String getName() {
return name;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
}
這裏有三個編碼提示,方便大家理解記憶。
- 因爲是確定個實例,所以枚舉類構造器爲私有。
- 和懶漢式單例模式類似,枚舉類的實例在類加載時被自動創建,所有我們應該把實例變量聲明爲靜態並且進行初始化。
- 枚舉類變量應該由類調用,所以實例變量爲公有。
- 測試代碼:
import org.junit.jupiter.api.Test;
/**
* 枚舉類:
* 1. 當類對象的個數爲確定的有限個時,我們稱此類爲枚舉類。
* 2. 當我們需要定義一組常量時,我們可以使用枚舉類。
* 3. 如果枚舉類中只有一個對象時,該對象可以看作單例。
*/
public class EnumTest1 {
@Test
public void test1(){
Season season = Season.SPRING;
System.out.println(season.getDescription());
}
}
- 輸出結果:
Spring
- Java 5.0版本使用enum關鍵字實行枚舉類:
enum Direction {
EAST(0), SOUTH(1), WEST(2), NORTH(3);
private final Integer value;
private Direction(Integer value){
this.value = value;
}
public Integer getValue() {
return value;
}
}
- 測試代碼:
@Test
public void test2(){
Direction direction = Direction.EAST;
System.out.println(direction);
}
- 編寫提示:
- 使用enum關鍵字聲明類,替代原有的類修飾符包括class關鍵字。
- 實例變量不需要關鍵字修飾,由逗號分隔開,最後由分號結尾。
- 輸出:
EAST
- 對比兩種實現方式,可以發現,enum關鍵字寫法簡化了大量代碼。