目錄
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;
}
}