当前位置: 首页 > 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.dtcms.com/a/211082.html

相关文章:

  • 前端框架6
  • 解决 Supabase “permission denied for table XXX“ 错误
  • [iic]iic四参数函数设备地址,寄存器地址,数据内容,数据长度
  • vue 引入配置的常量时,常量内部怎么引用 vue 中的值
  • 从 0 开始部署 Archivematica (windows环境)
  • Thinkphp6使用token+Validate验证防止表单重复提交
  • 如何进行Appium实现移动端UI自动化测试?
  • [C++]洛谷B3626 跳跃机器人(题干 + 详细讲解, BFS练习题)
  • 如何评价OpenRouter这样的大模型API聚合平台?
  • C++友元函数和友元类
  • wsl 魔法
  • 【每天一个知识点】“数字人”(Digital Human)
  • 中台项目-微前端qiankun-umimax
  • PCB设计实践(二十七)电感的形态分类与应用场景深度解析
  • 一个国债交易策略思路
  • MySQL快速入门篇---联合查询
  • Mybatis(2)
  • CPU飚高处理经验总结
  • Web前端开发(JS的快速入门)
  • AI要掌握的知识
  • RAGFlow与Dify的深度刨析
  • 矩阵乘法--Python
  • ES的Refresh、Flush、Merge操作对性能的影响? ES如何实现近实时(NRT)搜索? ES聚合查询的Terms和Cardinality区别?
  • Linux的读写屏障
  • Matlab实战训练项目推荐
  • 每日c/c++题 备战蓝桥杯(洛谷P1873 EKO砍树问题详解)
  • 打卡day35
  • 嵌入式开发之STM32学习笔记day10
  • DNS Server在高可用高并发系统中的应用
  • 探秘Transformer系列之(34)--- 量化基础