EnumUtil,通用枚举工具类,SpringBoot统一操作枚举

  最近在写一个关于社交的项目,里面有非常多非常多的状态需要判断,就写了非常多的非常多的枚举,因为要根据很多状态值返回文字信息给前端,所以就不得不在每个枚举中都写一个根据code获取描述的方法,比方说这样

/**
 * 添加类型枚举
 */
@Getter
public enum JoinTypeEnums {

    DIRECT(0, "直接通过"),

    AGREE(1, "同意后通过"),

    ;

    private Integer code;

    private String desc;

    JoinTypeEnums(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int value() {
        return this.code;
    }

    public static String getDesc(Integer code) {
        for (JoinTypeEnums joinTypeEnums : JoinTypeEnums.values()) {
            if (joinTypeEnums.getCode().equals(code)) {
                return joinTypeEnums.getDesc();
            }
        }
        return null;
    }

}

写的写的我发现 这样做很累  就想可不可以写个通用的东西来操控枚举,本来想着写一个BaseEnum,结果发现枚举类根本没法继承,因为你定义的枚举有三个属性的,也有两个属性的,等等等,最后苦思冥想 写了一个枚举工具类 话不多说 直接上代码

   首先你需要定义一个接口,里面有两个方法 一个是getCode  一个是getDesc  这个很关键 如果不写这个的话 你无法根据code来进行判断

public interface EnumCode {

    Integer getCode();

    String getDesc();
}

然后在你的项目中 把每一个枚举都实现这个接口 这样也省的你去写枚举的getter方法,比方说这样,这里你如果懒得重写的话,直接使用lombok的@Getter注解也可以达到 不会有任何编译错误

public enum ContactApplyEnum  implements  EnumCode {


    PENDING(0, "待处理"),
    APPROVED(1, "已通过"),
    DENIED(2, "已拒绝"),
    BLACKLISTED(3, "已拉黑");


    private final Integer code;
    private final String desc;

    ContactApplyEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

  @Override
    public Integer getCode() {
        return code;
    }

    @Override
    public String getDesc() {
        return desc;
    }

}

最后就可以用啦 直接cv到你的项目就好

package com.fastfine.chat.util;

import com.fastfine.chat.common.constant.CommonConstant;
import com.fastfine.chat.common.enums.EnumCode;
import com.fastfine.chat.exception.BusinessException;

public class EnumUtil {


    /**
     * 根据code获取枚举描述
     */
    public static <T extends Enum<T> & EnumCode> String getDescOfCode(Class<T> enumClass, Integer code) {
        T[] enumConstants = enumClass.getEnumConstants();
        if (enumConstants != null) {
            for (T enumConstant : enumConstants) {
                if (enumConstant.getCode() == code) {
                    return enumConstant.getDesc();
                }
            }
        }
        return CommonConstant.INVALID_CODE;//这里是一个字符串常量 自己定义就好
    }

    /**
     * 判断是否为有效的code
     */
    public static <T extends Enum<T> & EnumCode> boolean isNotValidCode(Class<T> enumClass, Integer code) {
        String desc = getDescOfCode(enumClass, code);
        return CommonConstant.INVALID_CODE.equals(desc);
    }

    /**
     * 根据code获取枚举实例
     */
    public static <T extends Enum<T> & EnumCode> T getEnumByCode(Class<T> enumClass, Integer code) {
        T[] enumConstants = enumClass.getEnumConstants();
        if (enumConstants != null) {
            for (T enumConstant : enumConstants) {
                if (enumConstant.getCode() == code) {
                    return enumConstant;
                }
            }
        }
        throw new BusinessException(500, "无法获取枚举实例,code不存在");
//        return null;
    }

}

接下来就是演示了 我定义了一个1  一个100  一个有效 一个无效

实际代码中的运用

   // 如果code无效 或者还是待通过 提醒用户选择有效参数
        if (EnumUtil.isNotValidCode(ContactApplyEnum.class,status) || Objects.equals(ContactApplyEnum.PENDING.code(), status)){
            return R.error("请选择有效的参数!");
        }

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值