文章目录
关于“JAVA中常量使用常量类或者常量接口还是使用枚举”,已有定论-使用枚举,原因就不再展开了。
借助java枚举,可以在定义错误名称和代码的同时,定义中文描述信息,但是实际应用中,往往需要在标准错误信息中增加一些可变信息。代码实现如下。
调用实例
@Test
void 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 com.muyi.common.enums;
import io.swagger.annotations.ApiModel;
/**
* 枚举:错误信息
* <pre>
* 中文信息中可定义字符串格式化转换符,获取中文信息时可以添加自定义信息
* </pre>
* @author MuYi
* @version 1.0
* @date 2022/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;
}
}