抽取公共的枚举类,方便一些场景下的使用
import cn.hutool.core.util.ObjectUtil;
import java.util.EnumSet;
import java.util.Objects;
public interface IBaseEnum<T> {
T getValue();
String getDescription();
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);
}
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;
}
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;
@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);
Integer value = (Integer) IBaseEnum.getValueByDescription("启用", StatusEnum.class);