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

Java枚舉的使用與反射應(yīng)用方式

 更新時(shí)間:2024年09月23日 15:22:00   作者:夏詩曼CharmaineXia  
枚舉類型是一種特殊的類,限定為固定實(shí)例集合,且是類型安全和線程安全的,枚舉類型不可繼承,但可以添加屬性和方法,支持單例模式,枚舉常量可以通過反射獲取和操作,提供了靈活性和擴(kuò)展性
  • 單例模式:枚舉類型是一種有限實(shí)例的類,枚舉常量在定義時(shí)就被限定為一組固定的實(shí)例,不能動(dòng)態(tài)添加或修改。每個(gè)枚舉常量都是枚舉類型的實(shí)例,因此枚舉類型天然地支持單例模式。
  • 類型安全:枚舉類型是類型安全的,編譯器會(huì)在編譯時(shí)檢查枚舉值的合法性,避免使用無效的枚舉常量,在多線程環(huán)境下使用枚舉類型是線程安全的。
  • 不可繼承:枚舉類型默認(rèn)是final修飾的,不能被繼承,因?yàn)槊杜e類型已經(jīng)提供了固定的實(shí)例集合。
  • 可添加屬性和方法:枚舉類型可以擁有字段、方法和構(gòu)造函數(shù),可以為每個(gè)枚舉常量添加屬性和行為。

一、定義方式

Java枚舉是一種特殊的數(shù)據(jù)類型,用于定義一組常量集合,可以定義簡(jiǎn)單的枚舉常量,也可以為枚舉常量添加屬性和方法。

1.1 簡(jiǎn)單定義

// 定義表示星期的枚舉類型
public enum Weekday {
    MONDAY, // 星期一
    TUESDAY, // 星期二
    WEDNESDAY, // 星期三
    THURSDAY, // 星期四
    FRIDAY, // 星期五
    SATURDAY, // 星期六
    SUNDAY // 星期日
}

1.2 帶參數(shù)定義

帶參數(shù)定義允許枚舉常量攜帶額外信息,使枚舉更具靈活性。

// 定義表示季節(jié)的枚舉類型,每個(gè)季節(jié)攜帶中文名稱
public enum Season {
    SPRING(1,"春天"), 
    SUMMER(2,"夏天"), 
    AUTUMN(3,"秋天"), 
    WINTER(4,"冬天"); 

	private Integer index; 
    private String chineseName; 

    public Integer getIndex() {return index;}
    public String getChineseName() {
        return chineseName;
    }
}

枚舉類型可以通過values()方法獲取所有枚舉常量的數(shù)組,方便遍歷枚舉值。

    public static String getByCode(Integer index){
        for(Season season : values()){
            if (season.getIndex() == index) {
                return getIndex.getChineseName();
            }
        }
        return null;
    }

二、反射應(yīng)用

1. 反射獲取枚舉常量

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        // 獲取枚舉類對(duì)象
        Class<Day> enumClass = Day.class;

        // 獲取枚舉常量
        Day[] days = enumClass.getEnumConstants();
        for (Day day : days) {
            System.out.println(day);
        }
    }
}

2. 反射獲取枚舉屬性

public class EnumReflectionExample {

    enum Day {
        MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");

        private String chineseName;

        Day(String chineseName) {
            this.chineseName = chineseName;
        }

        public String getChineseName() {
            return chineseName;
        }
    }

    public static void main(String[] args) {
        // 獲取枚舉類對(duì)象
        Class<Day> enumClass = Day.class;

        // 獲取枚舉屬性
        try {
            Field chineseNameField = enumClass.getDeclaredField("chineseName");
            chineseNameField.setAccessible(true);

            for (Day day : Day.values()) {
                String chineseName = (String) chineseNameField.get(day);
                System.out.println(day + " 的中文名是:" + chineseName);
            }
        } catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

3. 動(dòng)態(tài)調(diào)用枚舉方法

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;

        public void sayHello() {
            System.out.println("今天是:" + this);
        }
    }

    public static void main(String[] args) {
        // 動(dòng)態(tài)調(diào)用枚舉方法
        try {
            Day monday = Day.valueOf("MONDAY");
            monday.sayHello();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}

4. 動(dòng)態(tài)設(shè)置枚舉屬性

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;

        private String description;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }
    }

    public static void main(String[] args) {
        // 動(dòng)態(tài)設(shè)置枚舉屬性
        Day monday = Day.MONDAY;
        monday.setDescription("星期一");
        System.out.println(monday.getDescription());
    }
}

5. 判斷枚舉類型

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        // 枚舉類型判斷
        Class<?> enumClass = Day.class;
        if (enumClass.isEnum()) {
            System.out.println("這是一個(gè)枚舉類型");
        } else {
            System.out.println("這不是一個(gè)枚舉類型");
        }
    }
}

6. 反射獲取枚舉信息

public class EnumReflectionExample {

    enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }

    public static void main(String[] args) {
        // 枚舉信息獲取
        Class<Day> enumClass = Day.class;
        System.out.println("枚舉類的簡(jiǎn)單名稱:" + enumClass.getSimpleName());
        System.out.println("枚舉類的全限定名稱:" + enumClass.getName());
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    文章介紹了如何在K8S容器中的Java服務(wù)上進(jìn)行遠(yuǎn)程調(diào)試,包括配置Deployment、Service以及本地IDEA的調(diào)試設(shè)置,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • 詳解springMVC兩種方式實(shí)現(xiàn)多文件上傳及效率比較

    詳解springMVC兩種方式實(shí)現(xiàn)多文件上傳及效率比較

    本篇文章介紹了springMVC兩種方式實(shí)現(xiàn)多文件上傳及效率比較。springMVC實(shí)現(xiàn)多文件上傳有兩種,一種是字節(jié)流的方式進(jìn)行文件上傳,另外一種是使用springMVC包裝好的解析器進(jìn)行上傳,有興趣的可以了解一下。
    2016-12-12
  • Java設(shè)計(jì)模式之策略模式案例詳解

    Java設(shè)計(jì)模式之策略模式案例詳解

    策略模式(Strategy?Pattern)定義了一組同類型的算法,在不同的類中封裝起來,每種算法可以根據(jù)當(dāng)前場(chǎng)景相互替換,從而使算法的變化獨(dú)立于使用它們的客戶端即算法的調(diào)用者
    2022-07-07
  • JAVA基礎(chǔ)之控制臺(tái)輸入輸出的實(shí)例代碼

    JAVA基礎(chǔ)之控制臺(tái)輸入輸出的實(shí)例代碼

    下面小編就為大家?guī)硪黄狫AVA基礎(chǔ)之控制臺(tái)輸入輸出的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • JVM參數(shù)NativeMemoryTracking的使用

    JVM參數(shù)NativeMemoryTracking的使用

    本文主要介紹了JVM參數(shù)NativeMemoryTracking的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Mybatis 高級(jí)用法和tk.mybatis使用示例詳解

    Mybatis 高級(jí)用法和tk.mybatis使用示例詳解

    tkmybatis 是對(duì)底層 sql 進(jìn)行了抽象封裝,不需要考慮 sql 怎么寫,只需要按照邏輯思維,遵循 tkmybatis 的語法即可實(shí)現(xiàn)數(shù)據(jù)庫操作,這篇文章主要介紹了Mybatis 高級(jí)用法和tk.mybatis使用,需要的朋友可以參考下
    2024-05-05
  • Java導(dǎo)出Excel動(dòng)態(tài)表頭的示例詳解

    Java導(dǎo)出Excel動(dòng)態(tài)表頭的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java導(dǎo)出Excel動(dòng)態(tài)表頭的相關(guān)知識(shí),文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下
    2025-02-02
  • 使用IDEA對(duì)SpringBoot應(yīng)用進(jìn)行遠(yuǎn)程調(diào)試方式

    使用IDEA對(duì)SpringBoot應(yīng)用進(jìn)行遠(yuǎn)程調(diào)試方式

    文章介紹了如何在IDEA中對(duì)部署在服務(wù)器上的SpringBoot應(yīng)用進(jìn)行遠(yuǎn)程調(diào)試,通過配置遠(yuǎn)程調(diào)試端口和啟動(dòng)參數(shù),本地IDEA可以設(shè)置斷點(diǎn)并進(jìn)行調(diào)試
    2025-02-02
  • java 獲取對(duì)象中為null的字段實(shí)例代碼

    java 獲取對(duì)象中為null的字段實(shí)例代碼

    這篇文章主要介紹了java 獲取對(duì)象中為null的字段實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • Java?for循環(huán)倒序輸出的操作代碼

    Java?for循環(huán)倒序輸出的操作代碼

    在Java中,要實(shí)現(xiàn)一個(gè)for循環(huán)的倒序輸出,通常我們會(huì)使用數(shù)組或集合(如ArrayList)作為數(shù)據(jù)源,然后通過倒序遍歷這個(gè)數(shù)組或集合來實(shí)現(xiàn),這篇文章主要介紹了Java?for循環(huán)倒序輸出,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

佳木斯市| 昆明市| 浦县| 勃利县| 双柏县| 明水县| 广昌县| 辰溪县| 保康县| 长宁区| 涞水县| 阿城市| 霍山县| 炉霍县| 乌审旗| 西乡县| 南丹县| 巴东县| 海伦市| 公安县| 黔东| 扶沟县| 离岛区| 内江市| 长顺县| 安义县| 九江县| 广水市| 金华市| 扬中市| 枣阳市| 德保县| 太仓市| 白朗县| 菏泽市| 柘荣县| 西吉县| 司法| 旺苍县| 大石桥市| 保定市|