java反射获取所有接口实现类

需求描述

项目业务前后端交互需要的一些特定值需要用枚举类型列举出来,并且每个枚举值对应的外部使用值不是固定的,
类似于 APPLE(“apple”,“苹果”) —> APLE 这样一个对应关系,而APLE是在数据库里配置的,不是固定的,在程序运行时从数据库加载到map里做映射,因为手动添加到数据库比较麻烦而且容易漏掉,于是想到利用接口加反射的方式,将所有的枚举类型列举出来,并根据一定规则生成sql语句插入数据库,然后直接去数据库手动修改映射值就可以了。

类继承关系为:IMetadataDict.class 为接口,各个枚举类实现这个接口,这样就不会将无关的枚举类也包含进去。

依赖及测试方法如下:

        <!-- 反射库 -->
        <!-- https://mvnrepository.com/artifact/org.reflections/reflections -->
        <dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
            <version>0.10.2</version>
        </dependency>
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Reflections reflections = new Reflections(IMetadataDict.class.getPackage().getName());
        Set<Class<? extends IMetadataDict>> set = reflections.getSubTypesOf(IMetadataDict.class);

        for (Class<? extends IMetadataDict> dict : set) {
            LOG.info("ClassName: {}", dict.getSimpleName());
            Method valueM = dict.getMethod("getValue");
            Method descM = dict.getMethod("getDesc");
            Method groupM = dict.getMethod("getGroupName");
            for (Object field : dict.getEnumConstants()) {
                String value = (String) valueM.invoke(field);
                String desc = (String) descM.invoke(field);
                String group = (String) groupM.invoke(field);
                LOG.info("group: {}, value: {}, desc: {}", group, value, desc);
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值