枚舉類擴充處理

問題背景

由于 Java 不允許枚舉繼承另一個枚舉(enum cannot extend enum),但可以通過 組合方式工具類 來實現類似功能。


? 解決方案一:組合方式引入原始枚舉值

示例代碼:

public enum CustomErrorCodeEnum implements IErrorInfo {// 組合方式:關聯 ErrorCodeEnum 值CUSTOM_CODE_1(800001, "雨量過大", ErrorCodeEnum.BATTERY_LOW),CUSTOM_CODE_2(800002, "風速過大", ErrorCodeEnum.NO_HOME_POINT),UNKNOWN(-1, "未知錯誤。", null);private final int code;private final String msg;private final ErrorCodeEnum originEnum; // 保存原始枚舉值CustomErrorCodeEnum(int code, String msg, ErrorCodeEnum originEnum) {this.code = code;this.msg = msg;this.originEnum = originEnum;}@Overridepublic String getMessage() {return msg;}@Overridepublic Integer getCode() {return code;}/*** 獲取對應的原始 ErrorCodeEnum 實例*/public ErrorCodeEnum getOriginEnum() {return originEnum;}
}

使用示例:

CustomErrorCodeEnum error = CustomErrorCodeEnum.CUSTOM_CODE_1;
if (error.getOriginEnum() != null) {System.out.println("原始錯誤碼名稱:" + error.getOriginEnum());System.out.println("原始錯誤碼描述:" + error.getOriginEnum().getMessage());
}

? 解決方案二:靜態方法獲取所有原始枚舉值(調用 ErrorCodeEnum.values()

如果你只是需要訪問 ErrorCodeEnum.values(),不需要映射到每個自定義錯誤碼,可以直接通過靜態方法調用:

public class CustomErrorCodeEnum implements IErrorInfo {// ... 其他字段和構造函數不變 .../*** 獲取所有原始 ErrorCodeEnum 值*/public static ErrorCodeEnum[] getOriginalEnums() {return ErrorCodeEnum.values();}
}

調用示例:

for (ErrorCodeEnum error : CustomErrorCodeEnum.getOriginalEnums()) {System.out.println(error.getMessage());
}

? 方案三(推薦):使用工具類統一管理

創建一個工具類用于聚合所有錯誤碼信息,便于統一處理不同來源的錯誤碼:

public class ErrorUtils {private static final Map<Integer, String> ERROR_MAP = new HashMap<>();static {for (ErrorCodeEnum error : ErrorCodeEnum.values()) {ERROR_MAP.put(error.getCode(), error.getMessage());}// 可選:加入自定義錯誤碼for (CustomErrorCodeEnum customError : CustomErrorCodeEnum.values()) {ERROR_MAP.put(customError.getCode(), customError.getMessage());}}public static String getMessageByCode(Integer code) {return ERROR_MAP.getOrDefault(code, "未定義的錯誤碼");}
}

調用示例:

System.out.println(ErrorUtils.getMessageByCode(800001));

📝 總結建議

方法描述
? 組合方式將原始枚舉值嵌入每個自定義錯誤碼中,便于雙向查找
? 靜態代理方法提供便捷 API 獲取原始枚舉數組
? 工具類聚合更靈活地統一管理多個錯誤源、簡化維護
? 不推薦繼承 enumJava 不支持,會編譯報錯

如需進一步整合錯誤碼,比如統一序列化 / 映射 / 異常處理機制,可以繼續擴展工具類或采用策略模式。

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

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

相關文章

Spring Security探索與應用

Spring Security核心概念 框架定位與核心能力 Spring Security是Spring生態中實現應用級安全的核心框架,其官方定義為"強大且高度可定制的認證與訪問控制框架"。作為Spring應用程序安全防護的事實標準解決方案,它通過模塊化設計提供以下核心能力: 認證(Authenti…

藍橋杯國14 不完整的算式

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;理清思路 然后一步步寫 問題描述 小藍在黑板上寫了一個形如 AopBC 的算式&#x…

掃描電鏡:打開微觀世界的“超維相機“

當你用手機拍攝一朵花的微距照片時&#xff0c;放大100倍已足夠驚艷。但如果告訴你&#xff0c;科學家手中的"相機"能將物體放大百萬倍&#xff0c;連病毒表面的蛋白突觸都清晰可見&#xff0c;你是否會好奇這背后的黑科技&#xff1f;這把打開微觀宇宙的鑰匙&#x…

JVM學習(四)--對象內存布局

目錄 一、對象內存布局 1、對象的實例化 1.1、你有幾種方式創建對象&#xff1f; 1.2、創建對象的步驟 1.2.1、從字節碼角度看待對象創建過程 1.2.2、從執行步驟角度分析 2、對象的內存布局 2.1、對象頭 2.2、實例數據 2.3、對齊填充 3、對象的訪問定位 3.1、句柄訪…

SQL每日一題(4)

前言&#xff1a;第四更 雖然已經全部做完了&#xff0c;這套卷子非常推薦&#xff01; 根據題目還原出來的原始表 employees表 idnameagestatus1張三28在崗2李四35在崗3王五42在崗4趙六NULL在崗5錢七58在崗6孫八24在崗7周九31離職8吳十-5在崗9鄭十一45在崗10王十二52在崗 題…

如何做好一份技術文檔?

文章目錄 前言一、技術文檔的核心原則二、技術文檔的類型與場景三、技術文檔的寫作流程3.1 需求分析階段&#xff08;文檔生產的基礎&#xff09;3.2 架構設計階段&#xff08;文檔的骨架搭建&#xff09;3.3 內容開發階段&#xff08;血肉填充&#xff09;3.4 質量保障階段&am…

怎么判斷一個Android APP使用了KMM這個跨端框架

要判斷一個 Android 應用是否使用了 KMM&#xff08;Kotlin Multiplatform Mobile&#xff09; 框架&#xff0c;可以通過以下方法逐步驗證&#xff1a; 一、安裝包結構分析 解壓 APK 將 .apk 文件重命名為 .zip 并解壓&#xff0c;檢查以下特征&#xff1a; ? kotlin/ 目錄&a…

Axure系統原型設計列表版方案

列表頁面是眾多系統的核心組成部分&#xff0c;承擔著數據呈現與基礎交互的重要任務。一個優秀的列表版設計&#xff0c;能夠極大提升用戶獲取信息的效率&#xff0c;優化操作體驗。下面&#xff0c;我們將結合一系列精心設計的列表版方案圖片&#xff0c;深入探討如何打造出實…

HarmonyOS優化應用內存占用問題性能優化四

一、使用purgeable優化C內存 Purgeable Memory是HarmonyOS中native層常用的內存管理機制&#xff0c;可用于圖像處理的Bitmap、流媒體應用的一次性數據、圖片等。應用可以使用Purgeable Memory存放其內部的緩存數據&#xff0c;并由系統根據淘汰策略統一管理全部的purgeable內存…

第一課如何學習課程

讀薄就這些東西 讀厚細節&#xff1b;實現了還是很混沌&#xff08;內功心法&#xff09;-》有個項目&#xff1b;在聽的過程中寫博客&#xff1a;我學了什么&#xff0c;敲代碼&#xff1b; 第二章 網絡-》9.1kv存儲 第三章 基礎組件 &#xff08;API函數、最基礎的底層架構…

Linux 系統不終止進程的情況下關閉長連接

使用 tcpkill 中斷指定 TCP 連接 適用場景&#xff1a;需主動中斷已知源IP或目標端口的連接&#xff0c;無需進程重啟。 安裝 dsniff 工具&#xff08;包含 tcpkill&#xff09;&#xff1a; yum -y install dsniff 捕獲并殺死特定連接&#xff08;例如目標IP 192.168.1.10…

TCP原理解析

目錄 TCP協議概述 1. 基礎尋址段?? ??2. 序列控制段?? ??3. 控制信息段?? ??4. 流量控制段?? ??5. 校驗與應急段?? ??6. 擴展功能段?? ??7. 數據承載段?? TCP原理 確認應答與序列號(安全機制) 超時重傳機制(安全機制) 連接管理機制&…

拋棄傳統P2P技術,EasyRTC音視頻基于WebRTC打造教育/會議/遠程巡檢等場景實時通信解決方案

一、方案背景 隨著網絡通信發展&#xff0c;實時音視頻需求激增。傳統服務器中轉方式延遲高、資源消耗大&#xff0c;WebP2P技術由此興起。EasyRTC作為高性能實時通信平臺&#xff0c;集成WebP2P技術&#xff0c;實現低延遲、高效率音視頻通信&#xff0c;廣泛應用于教育、醫療…

2025年度消費新潛力白皮書470+份匯總解讀|附PDF下載

原文鏈接&#xff1a;https://tecdat.cn/?p42178 過去一年&#xff0c;消費市場在政策驅動與技術迭代中呈現結構性變革。社零總額達487,895億元&#xff0c;實物商品網零額占比27%&#xff0c;線上渠道成為增長引擎。本報告從食品飲料、美妝護膚、家電數碼、服飾戶外四大核心領…

“智”造巨輪啟新程:數字安全的戰略布局

數據就像空氣&#xff0c;無處不在&#xff1b;安全就像呼吸&#xff0c;刻不容緩! 在智能化不斷創新的沃土上&#xff0c;某大型智能家電企業這艘智造巨輪正乘風破浪&#xff0c;駛向數字化的深藍大海。作為全球家電制造的領航者&#xff0c;深知&#xff1a;在這個數字時代&a…

React組件(二):常見屬性和函數

文章目錄 一、defaultProps 和 prop-types使用 defaultProps 設置組件的默認值使用prop-types進行props數據類型的校驗代碼舉例 二、事件綁定原生js做事件綁定使用 React 提供的方法&#xff0c;做事件綁定 三、生命周期函數&#xff1a;shouldComponentUpdate()四、在js代碼中…

redis 進行緩存實戰-18

使用 Redis 進行緩存 Redis 通常被認為只是一個數據存儲&#xff0c;但它的速度和內存中特性使其成為緩存的絕佳選擇。緩存是一種技術&#xff0c;通過將經常訪問的數據存儲在快速的臨時存儲位置來提高應用程序性能。通過使用 Redis 作為緩存&#xff0c;您可以顯著減少主數據…

【Nginx學習筆記】:Fastapi服務部署單機Nginx配置說明

服務部署單機Nginx配置說明 服務.conf配置文件&#xff1a; upstream asr_backend {server 127.0.0.1:8010; }server {listen 80;server_name your_domain.com;location / {proxy_pass http://localhost:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remot…

Qt網絡編程

前言 Qt為了支持跨平臺&#xff0c;對系統網絡編程的API&#xff08;socket API&#xff09;也進行了重新分裝。 實際Qt中進行網絡編程也不一定使用Qt封裝的網絡API&#xff0c;也有可能使用的是系統原生API或者其他第三方框架的API。 若要使用Qt中的網絡編程的API&#xff…

矩陣短劇系統:如何用1個后臺管理100+小程序?技術解析與實戰應用

引言&#xff1a;短劇行業的效率革命 2025年&#xff0c;短劇市場規模已突破千億&#xff0c;但傳統多平臺運營模式面臨重復開發成本高、用戶數據分散、內容同步效率低等痛點。行業亟需一種既能降本增效又能聚合流量的解決方案——“矩陣短劇系統”。通過“1個后臺管理100小程…