如何在运行时动态格式化Enum的label属性
自定义错误枚举的动态格式化与日志输出方案
改造错误枚举类
首先调整枚举结构,增加动态格式化模板的方法,同时适配日志所需的编码格式:
public enum CustomErrorEnum { MISSING_VALUE("W001", "The value *%s* is missing"), WRONG_VALUE("W002", "The value *%s* is wrong"); private final String code; private final String labelTemplate; CustomErrorEnum(String code, String labelTemplate) { this.code = code; this.labelTemplate = labelTemplate; } // 动态生成格式化后的错误描述 public String getFormattedLabel(Object... params) { return String.format(labelTemplate, params); } public String getCode() { return code; } }
关键调整说明
- 将原
label字段重命名为labelTemplate,明确其作为格式化模板的作用 - 新增
getFormattedLabel方法,通过可变参数接收动态值,利用String.format完成模板填充 - 枚举项的
code直接使用日志要求的格式(如W001),避免额外转换
日志输出示例
在业务代码中触发错误时,直接调用枚举方法生成符合要求的日志内容:
// 模拟错误场景:用户输入无效日期 String invalidDate = "2026-13-13"; CustomErrorEnum errorType = CustomErrorEnum.WRONG_VALUE; // 组装日志内容 String logMessage = String.format("%s, %s", errorType.getCode(), errorType.getFormattedLabel(invalidDate)); // 输出日志(实际项目中替换为日志框架API,如log.warn(logMessage)) System.out.println(logMessage);
执行后输出结果:
W002, The value *2026-13-13* is wrong
扩展说明
如果需要支持多占位符的模板(比如同时包含字段名和错误值),只需修改枚举模板并传入对应参数即可:
// 新增枚举项 INVALID_FIELD("W003", "The value *%s* for field *%s* is invalid"); // 使用示例 String logMessage = CustomErrorEnum.INVALID_FIELD.getFormattedLabel("2026-13-13", "birthday"); // 输出:W003, The value *2026-13-13* for field *birthday* is invalid
内容的提问来源于stack exchange,提问作者Severin Mbekou
相关产品推荐
相关产品推荐

