枚举父接口
java
public interface BaseEnum {
Integer getCode();
String getLabel();
/**
* 根据值获取枚举
*
* @param code
* @param clazz
* @return
*/
static <E extends Enum<E> & BaseEnum> E getEnumByCode(Integer code, Class<E> clazz) {
Objects.requireNonNull(code);
// 获取类型下的所有枚举
EnumSet<E> allEnums = EnumSet.allOf(clazz);
return allEnums.stream()
.filter(e -> e.getCode().equals(code))
.findFirst()
.orElse(null);
}
/**
* 根据文本标签获取枚举
*
* @param label
* @param clazz
* @return
*/
static <E extends Enum<E> & BaseEnum> E getEnumByLabel(String label, Class<E> clazz) {
Objects.requireNonNull(label);
// 获取类型下的所有枚举
EnumSet<E> allEnums = EnumSet.allOf(clazz);
return allEnums.stream()
.filter(e -> e.getLabel().equals(label))
.findFirst()
.orElse(null);
}
/**
* 根据值获取文本标签
*
* @param code
* @param clazz
* @return
*/
static <E extends Enum<E> & BaseEnum> String getLabelByCode(Integer code, Class<E> clazz) {
// 根据值获取枚举
E matchEnum = getEnumByCode(code, clazz);
if (matchEnum != null) {
return matchEnum.getLabel();
}
throw new RuntimeException("根据值获取文本标签失败");
}
/**
* 根据文本标签获取值
*
* @param label
* @param clazz
* @return
*/
static <E extends Enum<E> & BaseEnum, T> int getCodeByLabel(String label, Class<E> clazz) {
// 根据文本获取枚举
E matchEnum = getEnumByLabel(label,clazz);
if (matchEnum != null) {
return matchEnum.getCode();
}
throw new RuntimeException("根据文本标签获取值失败");
}
}
枚举
java
public enum StateEnum implements BaseEnum {
/**
* 启用
*/
ENABLE(1, "启用"),
/**
* 禁用
*/
DISABLE(0, "禁用");
@Getter
private final Integer code;
@Getter
private final String label;
StateEnum(Integer code, String label) {
this.code = code;
this.label = label;
}
}
测试代码
java
public static void main(String[] args) {
//根据值获取枚举
final StateEnum s1 = BaseEnum.getEnumByCode(1, StateEnum.class);
System.out.println(s1);
//根据标签获取枚举
final StateEnum s2 = BaseEnum.getEnumByLabel("启用", StateEnum.class);
System.out.println(s2);
//根据值获取标签
final String label = BaseEnum.getLabelByCode(1, StateEnum.class);
System.out.println(label);
//根据标签获取值
final int code = BaseEnum.getCodeByLabel("禁用", StateEnum.class);
System.out.println(code);
}