最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的Enum枚舉使用方法解析

 更新時(shí)間:2023年11月07日 10:01:58   作者:JFS_Study  
這篇文章主要介紹了Java中的Enum枚舉使用方法解析,枚舉是一種數(shù)據(jù)類型,和int、double、string等類型相似,枚舉用于聲明一組命名的常數(shù),當(dāng)一個(gè)變量有幾種可能的取值時(shí),可以將它定義為枚舉類型,需要的朋友可以參考下

一、為什么需要枚舉

舉個(gè)例子,生物界性別分“雄性”、“雌性”和“中性”,將其定義為靜態(tài)常量:

public class Gender{
    public static final int Male = 1;
    public static final int Female = 2;
    public static final int Neutral = 3;
}

對(duì)于這種單值類型的靜態(tài)常量定義,本身也沒錯(cuò),主要是在使用的地方?jīng)]有一個(gè)明確性的約束而已,比如這里的 judgeGender 方法的本意是傳入 Gender 的三種靜態(tài)常量之一,但由于沒有類型上的約束,因此傳入任意一個(gè) int 值都是可以的,編譯器也不會(huì)提出任何警告。

void judgeGender(int code){}

但是在枚舉類型出現(xiàn)之后,上面這種情況就可以用枚舉嚴(yán)謹(jǐn)?shù)厝ゼs束,比如用枚舉去定義性別就非常簡(jiǎn)潔了:

public enum Gender {
    Male, Female, Neutral
}

而且主要是在用枚舉的地方會(huì)有更強(qiáng)的類型約束。如下入?yún)㈩愋途蜁?huì)受到明確的類型約束,一旦傳入無效值,編譯器就會(huì)幫檢查,從而規(guī)避潛在問題。除此之外,枚舉在擴(kuò)展性方面比普通常量更方便、也更優(yōu)雅。

//入?yún)⒕拖薅祟愋?
void judgeGender(Gender gender){}

綜上,枚舉的意義:

  • 封裝有限的變化,提高代碼維護(hù)性,確保變量合法。 如果利用 int 類型表示星期一到星期日的話,就要判斷輸入 int 變量不在 1-7 的范圍內(nèi)的情況。
  • 代碼更優(yōu)雅,提高代碼可讀性。一個(gè)復(fù)制的程序里面,可能要用到成百上千的靜態(tài)常量,如果全寫在一個(gè)文件里面,容易造成命名混淆,程序讀起來也比較麻煩。

二、單值枚舉

定義一個(gè)性別枚舉:

public enum Gender {
    Male, Female, Neutral
}

枚舉的所有基本用法:

public class judgeGender {
    public static void main(String[] args) {
        for (Gender genderType : Gender.values()) {
            System.out.println(genderType);
        }
        Gender male = Gender.Male;
        Gender female = Gender.Female;
        Gender neutral = Gender.Neutral;
        System.out.println(male.ordinal());//0
        System.out.println(female.ordinal());//1
        System.out.println(neutral.ordinal());//2
        System.out.println(male.name());//Male
        System.out.println(female.name());//Female
        System.out.println(neutral.name());//Neutral
        System.out.println(male.compareTo(male));//0
        System.out.println(male.compareTo(female));//-1
        System.out.println(female.compareTo(neutral));//-1
        System.out.println(Gender.valueOf("Male"));//Male
        System.out.println(Gender.valueOf("Female"));//Female
        System.out.println(Gender.valueOf("Neutral"));//Neutral
        Gender gender = Gender.Male;
        switch (gender) {
            case Male:
                System.out.println("男");
                break;
            case Female:
                System.out.println("女");
                break;
            case Neutral:
                System.out.println("中性");
                break;
        }//男
    }
}

三、多值枚舉

上面展示的枚舉例子非常簡(jiǎn)單,僅僅是單值的情形,而實(shí)際項(xiàng)目中用枚舉往往是多值用法。擴(kuò)充一下上面的 Gender 枚舉,在里面加入 【說明 – 編碼】的對(duì)應(yīng)關(guān)系,這也是實(shí)際項(xiàng)目中常用的用法??梢栽诿杜e里自定義各種屬性、構(gòu)造函數(shù)、甚至各種方法:

public enum GenterType {

    Male("男", "01"),
    Female("女", "02"),
    Neutral("中性", "03"),
    ;

    //自定義屬性
    private final String explain;
    private final String code;
    public String getExplain() {
        return explain;
    }
    public String getCode() {
        return code;
    }
    //自定義構(gòu)造函數(shù)
    GenterType(String explain, String code) {
        this.explain = explain;
        this.code = code;
    }
}

從上述代碼可知,在 enum 枚舉類中完全可以像在普通 Class 里一樣聲明屬性、構(gòu)造函數(shù)以及成員方法。

四、專門用于枚舉的集合類

一般習(xí)慣于使用諸如:HashMap 和 HashSet 等集合來盛放元素。而對(duì)于枚舉,有專門的集合類: EnumSet 和 EnumMap

  • EnumSet

EnumSet 是專門為盛放枚舉類型所設(shè)計(jì)的 Set 類型。

  • EnumMap

EnumMap 則是用來專門盛放枚舉類型為 key 的 Map 類型。

到此這篇關(guān)于Java中的Enum枚舉使用方法解析的文章就介紹到這了,更多相關(guān)Java中的Enum枚舉內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中的健康檢查詳解

    SpringBoot中的健康檢查詳解

    這篇文章主要介紹了SpringBoot中的健康檢查詳解,健康檢查是一種用來確保應(yīng)用程序和其所依賴的服務(wù)的狀態(tài)正常的機(jī)制,在本文中,我們將探討SpringBoot中的健康檢查是什么以及如何使用它來監(jiān)視應(yīng)用程序的狀態(tài),需要的朋友可以參考下
    2023-07-07
  • java觀察者模式實(shí)現(xiàn)和java觀察者模式演化

    java觀察者模式實(shí)現(xiàn)和java觀察者模式演化

    觀察者模式是經(jīng)典設(shè)計(jì)模式中很常用的一種,平常我們看到的監(jiān)聽器,基本上都是采用這種設(shè)計(jì)模式實(shí)現(xiàn)的,這里探討一下觀察者模式的演化
    2014-02-02
  • Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例

    Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例

    Spring?Validation其實(shí)就是對(duì)Hibernate?Validator進(jìn)一步的封裝,方便在Spring中使用,這篇文章主要介紹了Spring?Validation實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)的示例,需要的朋友可以參考下
    2023-03-03
  • 深入學(xué)習(xí)Spring Boot排查 @Transactional 引起的 NullPointerException問題

    深入學(xué)習(xí)Spring Boot排查 @Transactional 引起的 NullPointerException問題

    這篇文章主要介紹了深入學(xué)習(xí)Spring Boot排查 @Transactional 引起的 NullPointerException問題,需要的朋友可以參考下
    2018-01-01
  • 淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法

    這篇文章主要介紹了淺談MyBatis-Plus學(xué)習(xí)之Oracle的主鍵Sequence設(shè)置的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java多線程提交按照時(shí)間順序獲取線程結(jié)果詳解流程

    Java多線程提交按照時(shí)間順序獲取線程結(jié)果詳解流程

    在工作中是否存在這樣的場(chǎng)景,多個(gè)線程提交執(zhí)行,你不想全部線程執(zhí)行結(jié)束了獲取結(jié)果,而是有線程完成返回結(jié)果就獲取消費(fèi)。本文提供該場(chǎng)景的工具類,可以直接用哦
    2021-11-11
  • Mybatis框架之工廠模式(Factory Pattern)

    Mybatis框架之工廠模式(Factory Pattern)

    MyBatis中使用工廠模式來管理和創(chuàng)建SqlSession對(duì)象,從而簡(jiǎn)化數(shù)據(jù)庫(kù)訪問的配置和管理過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 詳解spring cloud hystrix請(qǐng)求緩存(request cache)

    詳解spring cloud hystrix請(qǐng)求緩存(request cache)

    這篇文章主要介紹了詳解spring cloud hystrix請(qǐng)求緩存(request cache),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • SpringBoot?基于?MongoTemplate?的工具類過程詳解

    SpringBoot?基于?MongoTemplate?的工具類過程詳解

    MongoDB是一個(gè)高性能,開源,無模式的文檔型數(shù)據(jù)庫(kù),是當(dāng)前NoSql數(shù)據(jù)庫(kù)中比較熱門的一種,這篇文章主要介紹了SpringBoot基于MongoTemplate的工具類,需要的朋友可以參考下
    2023-09-09
  • Mybatis自定義攔截器和插件開發(fā)詳解

    Mybatis自定義攔截器和插件開發(fā)詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis自定義攔截器和插件開發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

兴文县| 通河县| 龙里县| 清新县| 平和县| 景德镇市| 武义县| 瑞金市| 石屏县| 阿鲁科尔沁旗| 阿拉善右旗| 拜泉县| 朔州市| 柞水县| 通州区| 高雄县| 扎鲁特旗| 秀山| 屯留县| 松桃| 平乐县| 赤水市| 普格县| 扶绥县| 仙游县| 河北省| 梓潼县| 漯河市| 张家口市| 遵义市| 洛宁县| 台安县| 皮山县| 连州市| 玉树县| 山丹县| 灵川县| 恭城| 潜山县| 通江县| 五河县|