美文网首页
日常总结:获取枚举类通用接口

日常总结:获取枚举类通用接口

作者: 灿烂的GL | 来源:发表于2024-06-20 10:52 被阅读0次

场景:前端有些需要获取枚举类的接口
实现逻辑:通过反射机制写一个通用方法来获取枚举类
1、通用方法实现:

@Slf4j
public class EnumUtils {

    @Data
    public static class EnumData {
        private Object name;
        private Object code;
    }

    /**
     * 将枚举类的指定属性转换为EnumData的code和name属性
     * @param enumClass 枚举类
     * @return
     */
    public static List<EnumData> getEnumList(Class<?> enumClass, String codeField, String nameField) {
        try {
            Object[] oo = enumClass.getEnumConstants();
            List<EnumData> list = new LinkedList<>();

            for (Object o : oo) {
                EnumData enumEntity = convertToEnumMeta(enumClass, o, codeField, nameField);
                list.add(enumEntity);
            }
            return list;
        } catch (Exception e) {
            log.warn("枚举类 {} 解析异常", enumClass.getCanonicalName(), e);
            return Collections.emptyList();
        }
    }

        /**
         * 将枚举类对象转换为EnumData 对象
         */
        private static EnumData convertToEnumMeta(Class clazz, Object o, String codeField, String nameField) throws Exception {
            EnumData enumEntity = new EnumData();

            Field field = clazz.getDeclaredField(codeField);
            Object code = ReflectUtil.getFieldValue(o, field);
            enumEntity.setCode(code);

            Field field1 = clazz.getDeclaredField(nameField);
            Object name = ReflectUtil.getFieldValue(o, field1);
            enumEntity.setName(name);

            return enumEntity;
        }
}

2、接口调用
这里的“code”和“name”就是枚举类中定义的变量名

    @GetMapping(value = "/enum")
    public Result<List<EnumUtils.EnumData>> getEnumList() {
        return Result.success(EnumUtils.getEnumList(testEnum.class, "code", "name"));
    }

返回数据格式如下:

    * [
     *     {
     *         "code": "value",
     *         "name": "value"
     *     },
     *     {
     *         "code": "value",
     *         "name": "value"
     *     }
     * ]

相关文章

  • Kotlin特殊类(枚举、内部类)

    枚举 每个枚举常量都有在枚举类声明中获取其名称和位置的属性 枚举常量实现了 Comparable 接口 枚举常量顺...

  • 枚举_enum

    遍历 枚举类: 测试类 反射获取值 枚举类: 测试类:

  • Java篇-枚举的使用

    一 : 自定义枚举类 枚举类调用 二 : 使用enum关键字定义枚举类 让枚举类实现接口: 可以让不同的枚举类的对...

  • 枚举--java24(02/17/2016)

    如何自定义枚举类如何使用enum定义枚举类、枚举类的主要方法实现接口的枚举类 JDK1.5之前需要自定义枚举类JD...

  • 枚举工具类,通过Code返回枚举

    定义接口。用于反射范式编程 定义业务枚举,并实现CodeEnum接口 定义枚举工具类 使用范例:

  • 常量与枚举在项目中的使用

    系统里实现常量的方式有三种:1、接口常量2、类常量3、枚举 1、接口常量:jdk1.5之前,没有枚举类,有的用接口...

  • Enum

    java定义新的类型的方式:类、接口、枚举 取出枚举的全部类容: 类集对枚举的支持:EnumMap、EnumSet...

  • Effective Java 2nd 笔记

    看书就要做笔记啊!!!每天撸一点↖(ω)↗ 创建和销毁对象 对所有对象都通用的方法 类和接口 泛型 枚举和注解 方...

  • Android枚举实现Parcelable接口

    枚举类实现Parcelable的写法如下: 当枚举类为一个类的成员变量,并且该类也要实现Parcelable接口时...

  • 提示三十八

    提示三十八:使用接口模拟可扩展的枚举。 因为枚举类无法被继承,作者为了扩展枚举,所以让他们共同实现了相同的接口,一...

网友评论

      本文标题:日常总结:获取枚举类通用接口

      本文链接:https://www.haomeiwen.com/subject/mqbccjtx.html