Java 枚舉類的創建(自定義枚舉類和使用enum關鍵字的對比)

在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 + '\'' +
                '}';
    }
}

這裏有三個編碼提示,方便大家理解記憶。

  1. 因爲是確定個實例,所以枚舉類構造器爲私有。
  2. 和懶漢式單例模式類似,枚舉類的實例在類加載時被自動創建,所有我們應該把實例變量聲明爲靜態並且進行初始化。
  3. 枚舉類變量應該由類調用,所以實例變量爲公有。
  • 測試代碼:
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);
    }
  • 編寫提示:
  1. 使用enum關鍵字聲明類,替代原有的類修飾符包括class關鍵字。
  2. 實例變量不需要關鍵字修飾,由逗號分隔開,最後由分號結尾。
  • 輸出:
EAST
  • 對比兩種實現方式,可以發現,enum關鍵字寫法簡化了大量代碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章