You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行时动态格式化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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:01:11