欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java枚舉的使用與反射應用方式

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

一、定義方式

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

1.1 簡單定義

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

1.2 帶參數(shù)定義

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

// 定義表示季節(jié)的枚舉類型,每個季節(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;
    }

二、反射應用

1. 反射獲取枚舉常量

public class EnumReflectionExample {

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

    public static void main(String[] args) {
        // 獲取枚舉類對象
        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) {
        // 獲取枚舉類對象
        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. 動態(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) {
        // 動態(tài)調(diào)用枚舉方法
        try {
            Day monday = Day.valueOf("MONDAY");
            monday.sayHello();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }
    }
}

4. 動態(tài)設置枚舉屬性

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) {
        // 動態(tài)設置枚舉屬性
        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("這是一個枚舉類型");
        } else {
            System.out.println("這不是一個枚舉類型");
        }
    }
}

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("枚舉類的簡單名稱:" + enumClass.getSimpleName());
        System.out.println("枚舉類的全限定名稱:" + enumClass.getName());
    }
}

總結

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

相關文章

  • 淺談Java垃圾回收機制

    淺談Java垃圾回收機制

    這篇文章主要介紹了淺談Java垃圾回收機制,文中有非常詳細的圖文示例及代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • @JsonSerialize不起作用的解決方案

    @JsonSerialize不起作用的解決方案

    這篇文章主要介紹了@JsonSerialize不起作用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java后臺如何接收get請求傳過來的數(shù)組

    java后臺如何接收get請求傳過來的數(shù)組

    這篇文章主要介紹了java后臺如何接收get請求傳過來的數(shù)組問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 基于springboot實現(xiàn)文件上傳

    基于springboot實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了基于springboot實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JavaEE在線人數(shù)管理系統(tǒng)

    JavaEE在線人數(shù)管理系統(tǒng)

    這篇文章主要為大家分享了JavaEE在線人數(shù)管理系統(tǒng),顯示在線人數(shù)、在線人詳細信息、管理員踢人等功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java方法的可變參數(shù)類型實例分析

    Java方法的可變參數(shù)類型實例分析

    這篇文章主要介紹了Java方法的可變參數(shù)類型,通過實例對Java中的可變參數(shù)類型進行了較為深入的分析,需要的朋友可以參考下
    2014-09-09
  • 關于springboot的接口返回值統(tǒng)一標準格式

    關于springboot的接口返回值統(tǒng)一標準格式

    這篇文章主要介紹了關于springboot的接口返回值統(tǒng)一標準格式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 通過使用Byte?Buddy便捷創(chuàng)建Java?Agent

    通過使用Byte?Buddy便捷創(chuàng)建Java?Agent

    這篇文章主要為大家介紹了如何通過使用Byte?Buddy便捷創(chuàng)建Java?Agent的使用說明,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Comet框架Plushlet使用問題解決方案

    Comet框架Plushlet使用問題解決方案

    這篇文章主要介紹了Comet框架Plushlet使用問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java方法的覆蓋與隱藏的區(qū)別分析

    Java方法的覆蓋與隱藏的區(qū)別分析

    本篇文章介紹了,關于Java方法的覆蓋與隱藏的區(qū)別分析。需要的朋友參考下
    2013-04-04

最新評論