抽取基本枚举接口


抽取公共的枚举类,方便一些场景下的使用

import cn.hutool.core.util.ObjectUtil;

import java.util.EnumSet;
import java.util.Objects;

/**
 * @author YoonaDa
 * @email lintiaoda@suntang.com
 * @description: 基本枚举接口
 * @date 2022-04-24 09:26
 */
public interface IBaseEnum<T> {

    /**
     * 获取值
     *
     * @return
     */
    T getValue();

    /**
     * 获取值的描述
     *
     * @return
     */
    String getDescription();


    /**
     * 根据值获取枚举
     *
     * @param value
     * @param clazz
     * @param <E>
     * @return
     */
    static <E extends Enum<E> & IBaseEnum<?>> E getEnumByValue(Object value, Class<E> clazz) {
        Objects.requireNonNull(value);
        return EnumSet.allOf(clazz)
                .stream()
                .filter(e -> ObjectUtil.equal(e.getValue(), value))
                .findFirst()
                .orElse(null);
    }

    /**
     * 根据文本标签获取值
     *
     * @param value
     * @param clazz
     * @param <E>
     * @return
     */
    static <E extends Enum<E> & IBaseEnum<?>> String getDescriptionByValue(Object value, Class<E> clazz) {
        Objects.requireNonNull(value);
        E matchEnum = EnumSet.allOf(clazz)
                .stream()
                .filter(e -> ObjectUtil.equal(e.getValue(), value))
                .findFirst()
                .orElse(null);
        if (Objects.nonNull(matchEnum)) {
            return matchEnum.getDescription();
        }
        return null;
    }


    /**
     * 根据值获取描述
     *
     * @param description
     * @param clazz
     * @param <E>
     * @return
     */
    static <E extends Enum<E> & IBaseEnum<?>> Object getValueByDescription(String description, Class<E> clazz) {
        Objects.requireNonNull(description);
        E matchEnum = EnumSet.allOf(clazz)
                .stream()
                .filter(e -> ObjectUtil.equal(e.getDescription(), description))
                .findFirst()
                .orElse(null);
        if (Objects.nonNull(matchEnum)) {
            return matchEnum.getValue();
        }
        return null;
    }

}

实际使用如下

import com.yoona.cloud.common.core.base.IBaseEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @author YoonaDa
 * @email lintiaoda@suntang.com
 * @description: 所有状态枚举
 * @date 2022-04-22 10:25
 */
@Getter
@AllArgsConstructor
public enum StatusEnum implements IBaseEnum<Integer> {

    /**
     * 枚举所有状态
     */
    ENABLE(0, "启用"),

    DISABLED(1, "禁用");

    private final Integer value;
    
    private final String description;

}
    // 获取整个枚举
    StatusEnum statusEnum = IBaseEnum.getEnumByValue(0, StatusEnum.class);
    // 结果:启用
    String description = IBaseEnum.getDescriptionByValue(0, StatusEnum.class);
    // 结果:0
    Integer value = (Integer) IBaseEnum.getValueByDescription("启用", StatusEnum.class);

文章作者: YoonaDa
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 YoonaDa !
  目录