【Java-Enum】Java枚舉類Enum相關

目錄

1 枚舉類的簡單使用

2. enum枚舉類型根據構造參數A獲取構造參數B或具體枚舉實例


1 枚舉類的簡單使用

參考:https://blog.csdn.net/cauchy6317/article/details/82313088    @JAVA枚舉類型(Enum)的使用
參考:https://blog.csdn.net/qq_33945246/article/details/91043605    @Java面試知識點(二十九)Java枚舉類enum

在實際生活中有些類的實例對象是固定的。例如季節(春夏秋冬)、性別(男女中)、太陽系行星(水金地火木土天海)等等。如果創建了一個Season類,我們當然有需要維護這個類的實例對象只能是春(SPRING)、夏(SUMMER)、秋(AUTUMN)、冬(WINTER)這四個。這個時候就體現出枚舉類的作用了,Java中枚舉類型就是針對這樣的場景需求所設計的。

enum 和 class、interface 的地位一樣。
枚舉(enum)類型是 Java 5 新增的特性,它是一種新的類型,允許用常量來表示特定的數據片斷。
枚舉(enum)類型全部都以類型安全(類型安全的代碼不會試圖訪問自己沒被授權的內存區域)的形式來表示。
使用 enum 定義的枚舉類默認繼承了 java.lang.Enum,而不是繼承 Object 類。枚舉類可以實現一個或多個接口
使用 enum 定義、非抽象的枚舉類默認使用 final 修飾,不可以被繼承
枚舉(enum)類型的構造器只能是私有的
枚舉類的所有實例都必須放在第一行,不需使用 new 關鍵字,不需顯式調用構造器。自動添加 public static final 修飾。

/**
 * 太陽系八大行星枚舉類
 * 根據Java的規範,枚舉類的後綴建議爲Enum,枚舉類型的實例對象建議全大寫
 */
public enum PlanetEnum {
    MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE
}

枚舉類的簡單使用:

// 初始化
private void initEnum() {
    // 【初始化方式1】通過PlanetEnum.valueOf(),獲取指定字符串的枚舉常數
    PlanetEnum enumMars = PlanetEnum.valueOf("MARS");
    // 【初始化方式2】直接初始化
    PlanetEnum enumJupiter = PlanetEnum.JUPITER;
}
// 引用
private void classifyPlanet(PlanetEnum planetEnum) {
    switch (planetEnum) {
        case MERCURY:
        case VENUS:
        case EARTH:
        case MARS:
            System.out.println("近日行星:" + planetEnum.name());
            break;
        case JUPITER:
        case SATURN:
        case URANUS:
        case NEPTUNE:
            System.out.println("遠日行星:" + planetEnum.toString());
            break;
    }
}

創建枚舉類,利用switch語句進行匹配從而得到相應的輸出值。其功能與定義一個常量類相似。

構造函數不爲空的枚舉類:

public enum PlanetEnum {
    // 枚舉類型:枚舉類的實例對象必須在最前面先定義,且必須爲每個實例對象都必須維護上定義的成員變量(參數)
    MERCURY("水星"), VENUS("金星"), EARTH("地球"), MARS("火星"), JUPITER("木星"), SATURN("土星"), URANUS("天王星"), NEPTUNE("海王星");

    // 枚舉類成員變量
    private String planetName;        // 可以用final修飾,設置爲不可變量,下同
    private int order;

    // 枚舉類自定義構造方法:枚舉類型的構造函數默認爲private,枚舉類型的初始化要在當前枚舉類中完成。
    PlanetEnum(String name) {
        this.planetName = name;
    }

    // 枚舉類對外方法
    public String getPlanetName() {
        return planetName;
    }
}

實際上在第一行寫枚舉類實例的時候,默認是調用了構造器的,所以此處需要傳入參數,因爲沒有顯式申明無參構造器,只能調用有參數的構造器。

構造器需定義成私有的,這樣就不能在別處申明此類的對象了。枚舉類通常應該設計成不可變類,它的成員變量(Field)不應該被改變,這樣會更安全,而且代碼更加簡潔。所以我們應該將其成員變量(Field)用 private final 修飾。

這樣可以直接在類外調用該枚舉類的對外方法:

    public void test() {
        PlanetEnum planetEnum = PlanetEnum.MERCURY;
        // 可以直接調用枚舉類對象的公共方法
        System.out.println(planetEnum.getPlanetName());
    }

更多用法參考:https://blog.csdn.net/qq_27093465/article/details/52180865    #Java 枚舉(enum) 詳解7種常見的用法#

 

2. enum枚舉類型根據構造參數A獲取構造參數B或具體枚舉實例

參考:https://blog.csdn.net/Tiglle/article/details/82529571    @java的枚舉enum根據code獲取name等

public enum PlanetEnum {
    // 枚舉類型:這裏使用帶兩個參數的構造函數
    MERCURY(1, "水星"), VENUS(2, "金星"), EARTH(3, "地球"), MARS(4, "火星"), JUPITER(5, "木星"), SATURN(6, "土星"), URANUS(7, "天王星"), NEPTUNE(8, "海王星");

    // 枚舉類成員變量
    private String planetName;
    private int code;

    // 枚舉類自定義構造方法:這裏使用帶兩個參數的構造函數
    PlanetEnum(int order, String name) {
        this.planetName = name;
        this.code = order;
    }

    // 枚舉類對外實例方法
    public String getPlanetName() {
        return planetName;
    }
    public int getCode() {
        return code;
    }

    // 枚舉類對外靜態方法
    /**
     * 根據枚舉類的某個成員變量(參數)來反推該枚舉具體實例
     *
     * @param param 來反推枚舉類型的指定實例的成員變量
     * @return 返回符合該實例成員參數的指定實例
     */
    public static PlanetEnum getEnumViaParam(String param) {
        for (PlanetEnum planetEnum : PlanetEnum.values()) {
            if (param.equals(planetEnum.getPlanetName())) {
                return planetEnum;
            }
        }
        return null;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章