目录
一、通用接口(读者直接Copy)
二、接口实现(已删除状态为例)
一、通用接口(读者直接Copy)
import cn.hutool.core.util.ObjectUtil;
import java.util.EnumSet;
import java.util.Objects;
/**
* 枚举通用接口
*
* @author
* @date 2023/4/17
*/
public interface IBaseEnum<T> {
/**
* 获取值
*
* @return
*/
T getValue();
/**
* 获取标签
*
* @return
*/
String getLabel();
/**
* 根据值获取枚举
*
* @param value
* @param clazz
* @param <E> 枚举
* @return
*/
static <E extends Enum<E> & IBaseEnum> E getEnumByValue(Object value, Class<E> clazz) {
Objects.requireNonNull(value);
// 获取类型下的所有枚举
EnumSet<E> allEnums = EnumSet.allOf(clazz);
E matchEnum = allEnums.stream()
.filter(e -> ObjectUtil.equal(e.getValue(), value))
.findFirst()
.orElse(null);
return matchEnum;
}
/**
* 根据文本标签获取值
*
* @param value
* @param clazz
* @param <E>
* @return
*/
static <E extends Enum<E> & IBaseEnum> String getLabelByValue(Object value, Class<E> clazz) {
Objects.requireNonNull(value);
// 获取类型下的所有枚举
EnumSet<E> allEnums = EnumSet.allOf(clazz);
E matchEnum = allEnums.stream()
.filter(e -> ObjectUtil.equal(e.getValue(), value))
.findFirst()
.orElse(null);
String label = null;
if (matchEnum != null) {
label = matchEnum.getLabel();
}
return label;
}
/**
* 根据文本标签获取值
*
* @param label
* @param clazz
* @param <E>
* @return
*/
static <E extends Enum<E> & IBaseEnum> Object getValueByLabel(String label, Class<E> clazz) {
Objects.requireNonNull(label);
// 获取类型下的所有枚举
EnumSet<E> allEnums = EnumSet.allOf(clazz);
String finalLabel = label;
E matchEnum = allEnums.stream()
.filter(e -> ObjectUtil.equal(e.getLabel(), finalLabel))
.findFirst()
.orElse(null);
Object value = null;
if (matchEnum != null) {
value = matchEnum.getValue();
}
return value;
}
}
二、接口实现(已删除状态为例)
package com.ciih.iot.common.enums;
import com.ciih.iot.common.base.IBaseEnum;
import lombok.Getter;
/**
* 状态枚举
*
* @author
* @date 2023/4/17
*/
public enum DeleteEnum implements IBaseEnum<Integer> {
/**
* 虚拟删除状态码
*/
DELETE(1, "已删除"),
UNDELETE(0, "未删除");
@Getter
private Integer value;
@Getter
private String label;
DeleteEnum(Integer value, String label) {
this.value = value;
this.label = label;
}
}