文章目录
关于“JAVA中常量使用常量类或者常量接口还是使用枚举”,已有定论-使用枚举,原因就不再展开了。
借助java枚举,可以在定义错误名称和代码的同时,定义中文描述信息,但是实际应用中,往往需要在标准错误信息中增加一些可变信息。代码实现如下。
调用实例
@Testvoid contextLoads() {String desc = MsgErr.DB_WRITE.getDesc("是否不唯一?");System.out.println("desc = " + desc);desc=MsgErr.INPUT_INVALID.getDesc();System.out.println("desc = " + desc);desc=MsgErr.INPUT_INVALID.getDesc("字典类型");System.out.println("desc = " + desc);}
desc = 保存数据失败!(注:是否不唯一?)desc = 输入参数无效,无法处理!desc = 输入参数[字典类型]无效,无法处理!
代码
package mon.enums;import io.swagger.annotations.ApiModel;/*** 枚举:错误信息* <pre>*中文信息中可定义字符串格式化转换符,获取中文信息时可以添加自定义信息* </pre>* @author MuYi* @version 1.0* @date /4/7 17:33**/@ApiModel(value = "接口MsgErr", description = "枚举:错误信息")public enum MsgErr {/*** 输入参数[%s]为空,无法处理!*/INPUT_NULL(0, "输入参数[%s]为空,无法处理!"),/*** 输入参数[%s]无效,无法处理!*/INPUT_INVALID(1, "输入参数[%s]无效,无法处理!"),/*** 读取数据时发生错误*/DB_READ(2, "读取数据时发生错误!"),/*** 保存数据失败(数据是否不唯一?、校验是否有误?)*/DB_WRITE(3, "保存数据失败!");private final String desc;private final Integer value;/*** 获得中文信息。如果包含字符串格式化转换法,自动移除** @return 中文信息*/public String getDesc() {return desc.contains("[%s]") ?desc.replace("[%s]", "") : desc;}/*** 获得中文信息。* <pre>*如果包含字符串格式化转换法,自动替换为输入参数*不含字符串格式化转换法,在中文信息尾部添加输入参数* </pre>** @param params 中文信息附加信息* @return 中文信息*/public String getDesc(Object params) {return desc.contains("[%s]") ?String.format(desc, params) :String.format("%s(注:%s)", desc, params);}public Integer getValue() {return value;}private MsgErr(Integer value, String desc) {this.desc = desc;this.value = value;}}