帮我写一个可扩展的 springboot 通用枚举
时间: 2023-07-25 10:31:02 浏览: 93
好的,下面是一个示例可扩展的 Spring Boot 通用枚举的实现:
首先,我们需要定义一个通用的枚举接口,包括枚举的名称、值和描述信息:
```java
public interface BaseEnum<T> {
String getName();
T getValue();
String getDescription();
}
```
然后,我们实现一个具体的枚举类,继承 BaseEnum 接口,并定义枚举的取值集合:
```java
public enum GenderEnum implements BaseEnum<Integer> {
MALE(1, "男"),
FEMALE(2, "女");
private Integer value;
private String name;
GenderEnum(Integer value, String name) {
this.value = value;
this.name = name;
}
@Override
public Integer getValue() {
return value;
}
@Override
public String getName() {
return name();
}
@Override
public String getDescription() {
return name;
}
}
```
最后,我们封装一个通用的工具类,用于获取枚举列表和根据值获取枚举:
```java
@Component
public class EnumUtils {
@SuppressWarnings("unchecked")
public static <E extends BaseEnum<T>, T> E getEnumByValue(Class<E> enumClass, T value) {
if (value == null) {
return null;
}
E[] enumConstants = enumClass.getEnumConstants();
for (E e : enumConstants) {
if (e.getValue().equals(value)) {
return e;
}
}
return null;
}
public static <E extends BaseEnum<?>> List<E> getEnumList(Class<E> enumClass) {
return Arrays.asList(enumClass.getEnumConstants());
}
}
```
现在,我们就可以使用这个可扩展的枚举了。例如,我们可以通过以下方式获取 GenderEnum 的所有取值:
```java
List<GenderEnum> genderList = EnumUtils.getEnumList(GenderEnum.class);
```
或者,根据取值获取 GenderEnum 枚举:
```java
GenderEnum male = EnumUtils.getEnumByValue(GenderEnum.class, 1);
```
这样,我们就可以方便地扩展枚举类型,而不需要修改现有的代码。
阅读全文