枚举父接口
public interface BaseEnum {
Integer getCode();
String getLabel();
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);
}
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);
}
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("根据值获取文本标签失败");
}
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("根据文本标签获取值失败");
}
}
枚举
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;
}
}
测试代码
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);
}
结果