Java 枚舉使用總結

目錄

一、枚舉基礎java

  1.一、建立枚舉最簡單的方式this

  1.二、簡單使用spa

二、枚舉的構造方法blog

  2.一、使用註釋方式說明ip

  2.二、使用構造方法開發

  2.三、使用帶有構造器的枚舉字符串

三、就這些了?get

  3.一、需求 it

  3.二、使用Map實現io

  3.三、枚舉結合Map

  

  

 

 

 

一、枚舉基礎

  1.一、建立枚舉最簡單的方式

package cn.ganlixin.demo.enums;

/**
 * 描述:  季節枚舉類
 */
public enum  SeasonEnum {

    // 枚舉值之間使用逗號隔開,而不是分號
    SPRING, SUMMER, AUTUMN, WINNER;
}

  

  1.二、簡單使用

@Test
public void testUseSeasonEnum() {
    System.out.println(SeasonEnum.AUTUMN);      // AUTUMN

    // 獲取枚舉類中定義的全部枚舉項(每一項都是枚舉,而不是字符串)
    final SeasonEnum[] values = SeasonEnum.values();
    for (SeasonEnum season : values) {
        System.out.print(season +" ");  // SPRING SUMMER AUTUMN WINTER
    }

    // 根據傳入的字符串,獲取與字符串同名的枚舉項(若是沒有字符串同名的枚舉項,則會報錯)
    final SeasonEnum winter = SeasonEnum.valueOf("WINTER");
    System.out.println(winter);         // WINTER

    // 枚舉項的比較
    System.out.println(SeasonEnum.WINTER == SeasonEnum.WINTER); // true
    // 字符串不能直接與枚舉進行比較
    //System.out.println("WINTER" == SeasonEnum.WINTER);
    // System.out.println(Objects.equals("WINTER", SeasonEnum.WINTER)); // false
}

    

二、枚舉的構造方法

  2.一、使用註釋方式說明

  雖然能夠經過給枚舉項增長註釋的方式來表達枚舉項的含義,可是對於打包發佈後,註釋是刪掉的,這時就很差了

package cn.ganlixin.demo.enums;

/**
 * 描述:  季節枚舉類
 */
public enum  SeasonEnum {

    // 枚舉值之間使用逗號隔開,使用註釋的方式說明枚舉項的含義
    SPRING, // 春天
    SUMMER, // 夏天
    AUTUMN, // 秋天
    WINTER; // 冬天
}

  

  2.二、使用構造方法

package cn.ganlixin.demo.enums;

/**
 * 描述:  季節枚舉類
 */
public enum  SeasonEnum {

    // 枚舉值定義。枚舉值之間使用逗號隔開,使用構造方法設置
    SPRING("春天"),
    SUMMER("夏天"),
    AUTUMN("秋天"),
    WINTER("冬天");

    // 枚舉項的說明(好比註釋"春天")
    String description;
    // 還能夠本身加其餘字段

    // 建立一個構造方法
    SeasonEnum(String description) {
        this.description = description;
    }

    // 獲取枚舉項描述
    public String getDescription() {
        return description;
    }

//    通常不建議提供setter,由於枚舉類不該該被改變(包括信息描述)
//    public void setDescription(String description) {
//        this.description = description;
//    }
}

  須要注意的是,上面SeasonEnum的各部分代碼順序不能更改,也就是說枚舉項定義必須在其餘代碼以前(包括構造方法、屬性、getter)。  

 

  2.三、使用帶有構造器的枚舉

@Test
public void testSeasonEnumWithConstructor() {
    System.out.println(SeasonEnum.AUTUMN);                  // AUTUMN

    // 每個枚舉項都默認包含name方法,返回枚舉項的字符串類型
    System.out.println(SeasonEnum.AUTUMN.name());           // AUTUMN
    
    // 調用方法獲取枚舉項的描述
    System.out.println(SeasonEnum.AUTUMN.getDescription()); // 秋天
}

  

三、就這些了?

  看完上面的定義和使用方式,你以爲枚舉就這些了嗎?的確,枚舉就這內容,可是在真實開發工做中,仍是不夠的。

  

  3.一、需求1  

  好比,我想根據一個字符串,獲取枚舉類中同名的枚舉項,可是返回的是枚舉項的描述:

  僞代碼以下:

String item = "xxx";

// 傳入字符串獲取對應的描述,而不是枚舉項
String desctiption = SeasonEnum.getDescription(item);

  

  3.二、使用Map實現

  一個簡單的方式就是經過使用不可變Map來實現,這裏就不掩飾了

 

  3.三、枚舉結合Map

  可使用枚舉和Map結合的方式,既保留了枚舉的功能,也可使用Map的功能

package cn.ganlixin.demo.enums;

import java.util.HashMap;
import java.util.Map;

/**
 * 描述:  季節枚舉類
 */
public enum  SeasonEnum {

    // 枚舉值之間使用逗號隔開,使用構造方法設置
    SPRING("春天"),
    SUMMER("夏天"),
    AUTUMN("秋天"),
    WINTER("冬天");

    // 用來存枚舉項(字符串類型)與description的對應關係
    private static final Map<String, String> SeasonEnumMap = new HashMap<>();

    static {
        // 將枚舉項的名稱與描述存入map
        for (SeasonEnum season : values()) {
            SeasonEnumMap.put(season.name(), season.getDescription());
        }
    }

    // 枚舉項的說明(好比註釋"春天")
    String description;

    // 建立一個構造方法
    SeasonEnum(String description) {
        this.description = description;
    }
    
    // 獲取枚舉項描述
    public String getDescription() {
        return description;
    }

    /**
     * 根據字符串類型的枚舉項,獲取描述
     * @param season
     * @return
     */
    public static String fromSeasonName(String season) {
        return SeasonEnumMap.get(season);
    }
}

  

  使用示例

@Test
public void testEnumWithMap() {
    System.out.println(SeasonEnum.fromSeasonName("WINTER"));     // 冬天

    System.out.println(SeasonEnum.fromSeasonName("NotExists"));  // null
}
相關文章
相關標籤/搜索