当前位置: 首页 > news >正文

枚举类扩充处理

问题背景

由于 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.xdnf.cn/news/623125.html

相关文章:

  • 【Qt】Qt 5.9.7使用MSVC2015 64Bit编译器
  • 基于SamOutV8的序列生成模型实现与分析
  • 如何把vue项目部署在nginx上
  • 用 AI 让学习更懂你:如何打造自动化个性化学习系统?
  • Linux10正式版发布,拥抱AI了!
  • PCB设计实践(二十七)电感的形态分类与应用场景深度解析
  • 【Linux】进程基本概念与基本操作
  • wordpress主题开发中常用的12个模板文件
  • 黑马k8s(十五)
  • 【触想智能】什么是工控一体机,工控一体机有什么用途?
  • 前端框架6
  • 折半搜索【2024华为智联杯 K.时光】
  • 安卓无障碍脚本开发全教程
  • Android-Glide学习总结
  • 当AI Agent遇上聊天机器人:一场关于效率与能力的较量
  • Day 0017:Web漏洞扫描(OpenVAS)解析
  • 【Java学习笔记】代码块
  • Express笔记
  • 塔能节能平板灯:点亮苏州某零售工厂节能之路
  • Oracle表索引变为不可用状态了怎么办
  • UniApp === H5实现主题切换
  • 【检索增强生成(RAG)全解析】从理论到工业级实践
  • commonmark.js 源码阅读(二) - Inline Parser
  • leetcode 两两交换链表中的节点 java
  • 【R语言科研绘图】
  • 讯飞AI相关sdk集成springboot
  • Matlab实战训练项目推荐
  • LangGraph-agent-天气助手
  • 自然语言处理核心技术:词向量(Word Embedding)解析
  • 【读代码】BAGEL:统一多模态理解与生成的模型