当前位置: 首页 > 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 不支持,会编译报错

如需进一步整合错误码,比如统一序列化 / 映射 / 异常处理机制,可以继续扩展工具类或采用策略模式。

相关文章:

  • 前端框架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要掌握的知识
  • zencart 团购网站/seo关键词排名优化联系方式
  • 购物网站名称/seo招聘
  • 常州企业建站系统模板/搜索引擎优化关键词选择的方法有哪些
  • 定西企业网站制作/泰州网站排名seo
  • 成华区建设局质检站网站/北京seo优化哪家公司好
  • 两个相同的网站对做优化有帮助/曲靖百度推广