Java 枚舉的使用與反射應用

文章目錄

  • 一、定義方式
      • 1.1 簡單定義
      • 1.2 帶參數定義
  • 二、反射應用
      • 1. 反射獲取枚舉常量
      • 2. 反射獲取枚舉屬性
      • 3. 動態調用枚舉方法
      • 4. 動態設置枚舉屬性
      • 5. 判斷枚舉類型
      • 6. 反射獲取枚舉信息

  • 單例模式:枚舉類型是一種有限實例的類,枚舉常量在定義時就被限定為一組固定的實例,不能動態添加或修改。每個枚舉常量都是枚舉類型的實例,因此枚舉類型天然地支持單例模式。

  • 類型安全:枚舉類型是類型安全的,編譯器會在編譯時檢查枚舉值的合法性,避免使用無效的枚舉常量,在多線程環境下使用枚舉類型是線程安全的。

  • 不可繼承:枚舉類型默認是final修飾的,不能被繼承,因為枚舉類型已經提供了固定的實例集合。

  • 可添加屬性和方法:枚舉類型可以擁有字段、方法和構造函數,可以為每個枚舉常量添加屬性和行為。

一、定義方式

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

1.1 簡單定義

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

1.2 帶參數定義

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

// 定義表示季節的枚舉類型,每個季節攜帶中文名稱
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()方法獲取所有枚舉常量的數組,方便遍歷枚舉值。

    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. 動態調用枚舉方法

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) {// 動態調用枚舉方法try {Day monday = Day.valueOf("MONDAY");monday.sayHello();} catch (IllegalArgumentException e) {e.printStackTrace();}}
}

4. 動態設置枚舉屬性

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) {// 動態設置枚舉屬性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());}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12086.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決在云服務器上無法使用QQ郵箱發送郵件的問題

最近在做測試demo的時候發現&#xff0c;在本地可以使用qq郵箱的服務來進行郵件的發送&#xff0c;但是把項目部署到云服務器上就沒辦法發送郵件&#xff0c;并且報錯是連接超時&#xff1a; 向xxxxxqq.com用戶發送綁定郵箱驗證碼異常&#xff1a;Mail server connection fail…

leetcode234-Palindrome Linked List

題目 給你一個單鏈表的頭節點 head &#xff0c;請你判斷該鏈表是否為回文鏈表 。如果是&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,2,1] 輸出&#xff1a;true 分析 可以用快慢指針的方式找到鏈表的…

自用代碼生成器代碼

代碼生成器 pom.xml文件中 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

【軟件測試】自動化測試 Selenium 篇(一)

一、什么是自動化測試 1、自動化測試介紹 自動化測試指軟件測試的自動化&#xff0c;在預設狀態下運行應用程序或者系統&#xff0c;預設條件包括正常和異常&#xff0c;最后評估運行結果。將人為驅動的測試行為轉化為機器執行的過程。 自動化就相當于將人工測試手段進行轉換…

【激活函數--下】非線性函數與ReLU函數

文章目錄 一、非線性函數在神經網絡中的重要性二、ReLU函數介紹及其實現2.1 ReLU函數概述2.2 ReLU函數的Python實現及可視化 一、非線性函數在神經網絡中的重要性 在神經網絡中&#xff0c;激活函數的選擇對于網絡的性能和能力至關重要。階躍函數和Sigmoid函數除了是激活函數的…

數據可視化-課堂記錄

week02 # 數據可視化的發展歷史 作用 格式塔原則 # 數據可視化的流程# 數據分析 指標體系建設 確定一個行業指標體系實現報表&#xff08;power bi python matplotlib seaborn pyecharts echarts&#xff09; # 數據分析面試 技術&#xff1a;sqlexcelpythonpowerbispss …

JS 實現冒泡排序

冒泡排序原理&#xff1a; 升序冒泡&#xff1a;兩次循環&#xff0c;相鄰元素兩兩比較&#xff0c;如果前面的大于后面的&#xff0c;就交互位置&#xff1b; 降序冒泡&#xff1a;兩次循環&#xff0c;相鄰元素兩兩比較&#xff0c;如果前面的小于后面的&#xff0c;就交互…

stable-diffusion-webui配置

源碼地址 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git報錯Fresh install fail to load AttributeError: NoneType object has no attribute _id pydantic降級 pip uninstall pydantic pip install pydantic1.10.11記得要把clip-vit-large-patch14放在opena…

業務邏輯攻擊是什么,如何有效進行防護

想象一下&#xff1a;您的開發團隊剛推出了一款令人驚嘆的全新應用程序&#xff0c;它具有頂級的API安全性&#xff0c;通過客戶端保護對其進行了強化&#xff0c;甚至還設置了針對機器人攻擊的防御措施。你感到這款產品很有安全保障&#xff0c;自己的團隊出色地完成了工作。 …

解決Java Web應用中下載文件無法打開的問題

在Java Web應用中&#xff0c;文件下載是一個常見的功能。但有時候&#xff0c;即使代碼看起來正確&#xff0c;下載的文件卻無法正確打開。 問題描述 假設我們有以下代碼用于下載文件&#xff1a; response.addHeader("Content-Disposition", "attachment;fi…

服務器通的遠程桌面連接不上,關于服務器通暢但遠程桌面連接不上問題的專業分析

在日常的企業IT管理中&#xff0c;服務器遠程桌面連接是一個重要的操作功能。然而&#xff0c;有時會出現服務器網絡通暢&#xff0c;但遠程桌面無法連接的情況。 問題分析 1. 防火墻或安全組設置問題&#xff1a;服務器的防火墻或安全組可能阻止了遠程桌面連接的端口&#xf…

adobe安裝“Error:SyntaxError:JSON Parse error:Unexpec

mac電腦安裝Adobe時&#xff0c;會提示錯誤“Error:SyntaxError:JSON Parse error:Unexpected EOF”&#xff0c;這是怎么回事兒的&#xff0c;不管您是安裝AI、PS、PR還是LR&#xff0c;如果也遇到相同的問題&#xff0c;可以參考一下方法解決&#xff1a; 「adobe安裝提示錯誤…

Java RMI反序列化總結篇-01

1.java rmi反序列化 RMI 允許一個應用程序訪問另外一個服務器或虛擬機上的對象&#xff0c;方法和服務&#xff0c;它使遠程方法調用就像在本地調用一樣簡單。它為用戶屏蔽了底層的網絡傳輸細節&#xff0c;使用的時候只需適當處理異常即可。所以 RMI 是非常容易使用的&#x…

Kubernetes集群安裝

Kubernetes集群安裝 環境準備 192.168.1.53 k8s-master 192.168.1.52 k8s-node-1 192.168.1.51 k8s-node-2 設置三臺機器的主機名&#xff1a; Master上執行&#xff1a; [rootlocalhost ~]# hostnamectl --static set-hostname k8s-masterNode1上執行&#xff1a; [ro…

vue3+vite項目部署服務器,選擇非根目錄訪問

背景 vue3vite項目&#xff0c;需要部署服務器。 但是根目錄已經部署了另外一個項目A了&#xff0c;這個時候要在部署另外一個項目B。 問題 比如你的地址是http://test.com 之前直接輸入http://test.com即可訪問A項目 如果B項目也這么干的話就沖突了 訪問A&#xff1a;http…

哪款骨傳導耳機最值得入手?精選5款頂尖配置的骨傳導耳機,閉眼入也不踩雷!

作為一名有著多年工作經驗的數碼博主&#xff0c;我見證了無數因盲目追求新穎而引發的聽力問題。在此&#xff0c;我必須鄭重提醒大家&#xff0c;雖然市面上充斥著眾多聲稱能提供卓越音質和佩戴舒適度的骨傳導耳機品牌&#xff0c;但它們之間存在大量劣質產品&#xff0c;這類…

centos7安裝zabbix-server

zabbixan-server安裝 環境安裝zabbix安裝zabbix配置apachezabbix-UI前端配置修改zabbix為中文語言 環境 準備&#xff1a; centos7系統、mysql數據庫/MariaDB數據庫 mysql數據庫可參照&#xff1a;https://blog.csdn.net/weixin_61367575/article/details/138774428?spm1001.…

算法-卡爾曼濾波之卡爾曼濾波的第二個方程:預測方程(狀態外推方程)

在上一節中&#xff0c;使用了靜態模型&#xff0c;我們推導出了卡爾曼濾波的狀態更新方程&#xff0c;但是在實際情況下&#xff0c;系統都是動態&#xff0c;預測階段&#xff0c;前后時刻的狀態是改變的&#xff0c;此時我們引入預測方程&#xff0c;也叫狀態外推方程&#…

企業為什么進行大數據遷移以及注意事項

在當今數字化時代&#xff0c;數據的遷移成為了企業優化其數據架構、提高數據處理能力、確保業務連續性和數據安全的關鍵步驟。企業可能出于多種原因&#xff0c;如成本效益、性能提升、系統升級、數據集中管理或云服務集成等&#xff0c;選擇將數據從一個存儲系統遷移到另一個…

Spring Boot 整合訊飛星火3.5通過接口Api接口實現聊天功能(首發)復制粘貼即可使用,后續更新WebSocket實現聊天功能

程序員必備網站&#xff1a; 天夢星服務平臺 (tmxkj.top)https://tmxkj.top/#/ 1.pom.xml <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><depen…