自定义枚举注解工具类
使用方式
/**
* @author FangRui
* @since 2021-03-09
*/
public enum Education {
@EnumUtil.Description("专科")
Specialist,
@EnumUtil.Description("本科")
undergraduate,
@EnumUtil.Description("硕士")
master,
@EnumUtil.Description("博士")
doctor
}
取得枚举字段上注解值
EnumUtil.getDescription(Education.doctor)
将枚举字段和注解value转为Map,适用于前端下拉框数据的选择
EnumUtil.nameToCode(Education.class)
结果结构为:key=枚举字段名 value=注解值
实现类KeyValue,存放每个字段的key和value
/**
* @author FangRui
* @since 2021-02-28
*/
public class KeyValue {
Object key;
Object value;
public Object getKey() {
return key;
}
public void setKey(Object key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
实现类EnumUtil
/**
* @author FangRui
* @since 2021-02-07
*/
public class EnumUtil {
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Description{
String value() default "";
}
/**
*将枚举字段和注解value转为Map
* @param clazz 枚举类
* @return map对象
*/
public static List<KeyValue> nameToCode(Class clazz) {
List<KeyValue> keyValues=new ArrayList<>();
//如果传入的class不是枚举类型,直接返回空
if (!clazz.isEnum()){
return null;
}
Field[] declaredFields = clazz.getFields();
for (Field declaredField : declaredFields) {
Description annotation = declaredField.getDeclaredAnnotation(Description.class);
if (null==annotation){
continue;
}
KeyValue keyValue = new KeyValue();
keyValue.setKey(declaredField.getName());
keyValue.setValue(annotation.value());
keyValues.add(keyValue);
}
return keyValues;
}
/**
* 根据枚举字段名取得枚举注解的value值
* @param clazz 枚举类型
* @param e 枚举字段
* @return description
*/
public static String getDescription(Class clazz,Enum e){
//如果传入的class不是枚举类型,直接返回空
if (!clazz.isEnum()){
return null;
}
Field[] declaredFields = clazz.getFields();
for (Field declaredField : declaredFields) {
Description annotation = declaredField.getDeclaredAnnotation(Description.class);
if (null==annotation){
continue;
}
if (declaredField.getName().equals(e.name())){
return annotation.value();
}
}
return null;
}
}