java中enum 实现接口
为什么会有这篇文章呢?日常生活中遇到了一个问题。听我慢慢说来
场景
我在组件中封装了一个BaseResultEnum;用来定义返回的错误码和错误信息。
UNKNOWN_EXCEPTION(500, "未知异常,请联系系统管理员"),
各个业务项目也写了类似的 枚举类。但是再返回的时候,必须xxxResultEnum.code,xxxResultEnum.msg 2个参数进行传递进来。因为枚举不能继承。
实现
有一天忽然发现可以枚举可以实现接口。上层定义一个统一的接口不就好了
public interface IResultCode {
代码语言:txt复制/**
代码语言:txt复制 * 返回码
*
* @return Integer
*/
Integer getCode();
代码语言:txt复制/**
代码语言:txt复制 * 返回消息
*
* @return String
*/
String getMsg();}
枚举类
@Getter
@AllArgsConstructor
public enum BaseResultEnum implements IResultCode {
代码语言:txt复制//========================全局结果枚举==============================//
代码语言:txt复制/**
代码语言:txt复制 * 未知异常
*/
UNKNOWN_EXCEPTION(500, "未知异常,请联系系统管理员"),
代码语言:txt复制/**
代码语言:txt复制 * 操作成功
*/
SUCCESS(200, "操作成功"),
/**
* 业务异常
*/
FAILURE(400, "业务异常"),
/**
* 服务未找到
*/
NOT_FOUND(404, "服务未找到");
代码语言:txt复制//========================具体业务自定义异常==============================//
代码语言:txt复制// 建议 一个业务模块固定的编码100开始:比如:100001、100002;
代码语言:txt复制/**
代码语言:txt复制 * 状态码
*/
final Integer code;
/**
* 消息内容
*/
final String msg;}
这样的话。业务内就自己定义自己项目内的错误信息就可以
@Getter
@AllArgsConstructor
public enum LearningResultEnum implements IResultCode {
代码语言:txt复制/**
代码语言:txt复制 * 学习未找到
*/
LEARNING_NOT_FOUND(1001, "该学习未找到");
/**
* 状态码
*/
final Integer code;
/**
* 消息内容
*/
final String msg;}
具体使用
throw new LearningException(LearningResultEnum.LEARNING_NOT_FOUND);
// 这里封装了一下 就可以直接接口当作参数
代码语言:txt复制public BaseException(IResultCode resultEnum) {
代码语言:txt复制 super(resultEnum.getMsg());
代码语言:txt复制 this.msg = resultEnum.getMsg();
代码语言:txt复制 this.code = resultEnum.getCode();
代码语言:txt复制}