1、定义一个EnumItem接口,供每个枚举类实现
public interface EnumItem<V> extends Serializable {
V getCode();
String getValue();
String getName();
}
2、枚举类SexEnum实现EnumItem接口,并重写方法
public enum SexEnum implements EnumItem<String> {
MALE("0", "男"),
FEMALE("1", "女"),
;
private final String code;
private final String value;
SexEnum(String code, String value) {
this.code = code;
this.value = value;
}
@Override
public String getCode() {
return code;
}
@Override
public String getValue() {
return value;
}
@Override
public String getName() {
return name();
}
}
3、定义枚举工具类EnumUtil
import java.util.*;
import java.util.stream.Collectors;
public class EnumUtil {
public static <T extends EnumItem<?>> List<T> getEnumItems(Class<T> enumType) {
return Arrays.asList(enumType.getEnumConstants());
}
public static <V, T extends EnumItem<V>> Map<V, String> getEnumMapCode(Class<T> enumType) {
Map<V, String> map = new HashMap<>();
for (T enumItem : enumType.getEnumConstants()) {
map.put(enumItem.getCode(), enumItem.getValue());
}
return map;
}
public static <V, T extends EnumItem<V>> Map<String, V> getEnumMapValue(Class<T> enumType) {
Map<String, V> map = new HashMap<>();
for (T enumItem : enumType.getEnumConstants()) {
map.put(enumItem.getValue(), enumItem.getCode());
}
return map;
}
public static <T extends EnumItem<?>> List<Map<String, Object>> getEnumList(Class<T> enumType) {
List<Map<String, Object>> list = new ArrayList<>();
if (!enumType.isEnum()) {
return new ArrayList<>();
}
T[] enums = enumType.getEnumConstants();
if (enums == null || enums.length <= 0) {
return new ArrayList<>();
}
for (T enumItem : enums) {
Map<String, Object> map = new HashMap<>();
map.put("code", enumItem.getCode());
map.put("value", enumItem.getValue());
map.put("name", enumItem.getName());
list.add(map);
}
return list;
}
public static <V, T extends EnumItem<V>> List<V> getEnumCodes(Class<T> enumType) {
return Arrays.stream(enumType.getEnumConstants()).map(EnumItem::getCode).collect(Collectors.toList());
}
public static <T extends EnumItem<?>> List<String> getEnumValues(Class<T> enumType) {
return Arrays.stream(enumType.getEnumConstants()).map(EnumItem::getValue).collect(Collectors.toList());
}
public static <V, T extends EnumItem<V>> T fromCode(Class<T> enumType, V code) {
if (code == null) {
return null;
}
for (T enumItem : enumType.getEnumConstants()) {
if (Objects.equals(code, enumItem.getCode())) {
return enumItem;
}
}
return null;
}
public static <T extends EnumItem<?>> T fromValue(Class<T> enumType, String value) {
if (value == null) {
return null;
}
for (T enumItem : enumType.getEnumConstants()) {
if (Objects.equals(value, enumItem.getValue())) {
return enumItem;
}
}
return null;
}
}
4、测试调用
public class Test01 {
public static void main(String[] args) {
List<SexEnum> items = EnumUtil.getEnumItems(SexEnum.class);
System.out.println(items.toString());
System.out.println(EnumUtil.getEnumCodes(SexEnum.class));
System.out.println(EnumUtil.getEnumValues(SexEnum.class));
System.out.println(EnumUtil.fromCode(SexEnum.class,"0"));
System.out.println(EnumUtil.fromValue(SexEnum.class,"男"));
System.out.println(EnumUtil.getEnumMapCode(SexEnum.class));
System.out.println(EnumUtil.getEnumMapValue(SexEnum.class));
System.out.println(EnumUtil.getEnumList(SexEnum.class));
}
}