利用EnumTools减少枚举中重复的方法

汪小哥的博客

https://blog.csdn.net/u012881904/article/details/104763791?spm=1001.2014.3001.5501

使用效果DEMO

public static void main(String[] args) {
    //获取msg
    String success = EnumCodeMsgUtils.getEnumMsgByCode(TaskStatusEnumsTwo.class, "success", "");
    log.info("msg:"+success);
	
    //获取是否存在
    boolean validEnumCode = EnumCodeMsgUtils.isValidEnumCode(TaskStatusEnumsTwo.class, "success");
    log.info("validEnumCode:"+validEnumCode);
	
    //获取msg的信息
    Optional<TaskStatusEnumsTwo> codeEnum = EnumCodeMsgUtils.getEnumByCode(TaskStatusEnumsTwo.class, "success");
    codeEnum.ifPresent(taskStatusEnumsTwo -> log.info("getEnumByCode:" + taskStatusEnumsTwo.getCode() + taskStatusEnumsTwo.getEnumMsg()));

 }


EnumUtils

package com.wangji92.github.study.other.enums.enhance;


import org.apache.commons.lang3.EnumUtils;

import java.util.Objects;
import java.util.Optional;

/**
 * 枚举处理工具类
 *
 * @author 汪小哥
 * @date 09-03-2020
 */
public class EnumCodeMsgUtils extends EnumUtils {
    /**
     * 根据code 获取到当前的枚举
     *
     * @param enumClass
     * @param code
     * @param <E>
     * @param <T>
     * @return
     */
    public static <E extends Enum<E> & EnumCodeMsg<T>, T> Optional<E> getEnumByCode(Class<E> enumClass, T code) {
        if (code == null) {
            return Optional.empty();
        }
        for (E enumConstant : enumClass.getEnumConstants()) {
            if (Objects.equals(enumConstant.getCode(), code)) {
                return Optional.of(enumConstant);
            }
        }
        return Optional.empty();
    }

    /**
     * 根据code 获取到枚举的msg的信息
     *
     * @param enumClass
     * @param code
     * @param defaultMsg 默认返回值
     * @param <E>
     * @param <T>
     * @return
     */
    public static <E extends Enum<E> & EnumCodeMsg<T>, T> String getEnumMsgByCode(Class<E> enumClass, T code, String defaultMsg) {
        Optional<E> enumByCode = EnumCodeMsgUtils.getEnumByCode(enumClass, code);
        if (enumByCode.isPresent()) {
            return enumByCode.get().getEnumMsg();
        }
        return defaultMsg;
    }

    /**
     * 根据code 获取到枚举的msg的信息,默认返回为空
     * @param enumClass
     * @param code
     * @param <E>
     * @param <T>
     * @return
     */
    public static <E extends Enum<E> & EnumCodeMsg<T>, T> String getEnumMsgByCode(Class<E> enumClass, T code) {
        return EnumCodeMsgUtils.getEnumMsgByCode(enumClass,code,"");
    }

    /**
     * 这个是否是一个有效的code
     *
     * @param enumClass
     * @param code
     * @param <E>
     * @param <T>
     * @return
     */
    public static <E extends Enum<E> & EnumCodeMsg<T>, T> boolean isValidEnumCode(Class<E> enumClass, T code) {
        Optional<E> enumByCode = EnumCodeMsgUtils.getEnumByCode(enumClass, code);
        return enumByCode.isPresent();
    }
}



code,msg接口分别定义

  • 表示具有code和msg能力
  • java类不能多继承,用接口表示
package com.wangji92.github.study.other.enums.enhance;

import java.io.Serializable;

/**
 * @author 汪小哥
 * @date 09-03-2020
 */
public interface EnumCode<T> extends Serializable {
    /**
     * 获取枚举的返回Code
     *
     * @param <T>
     * @return
     */
    T getCode();
}


/**
 * 枚举的返回msg的信息
 *
 * @author 汪小哥
 * @date 09-03-2020
 */
public interface EnumCodeMsg<T> extends EnumCode<T> {
    /**
     * 获取枚举的备注信息
     * @return
     */
    String getEnumMsg();
}


/**
 * @author 汪小哥
 * @date 09-03-2020
 */
@Slf4j
public enum TaskStatusEnumsTwo implements EnumCodeMsg<String> {
    SUCCESS("success", "成功"),
    FAIL("fail", "失败"),
    CANCEL("cancel", "取消");


    private String code;

    private String msg;

    TaskStatusEnumsTwo(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public String getEnumMsg() {
        return msg;
    }

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

posted @ 2021-08-29 21:32  沉梦匠心  阅读(156)  评论(0)    收藏  举报