java 反射高级用法

获取躯体属性的值 并获取属性上面是否有你需要的注解(支持继承)

public static List<WorkDeviceRuntime> deviceDataLogValue(Object model, String... properties) throws Exception {
        List<Field> proper = new ArrayList<>();
        Class<?> tmpClass = model.getClass();
        while (tmpClass != null && !tmpClass.getName().toLowerCase().equals("java.lang.object")) {
            //当父类为null的时候说明到达了最上层的父类(Object类).
            proper.addAll(Arrays.asList(tmpClass.getDeclaredFields()));
            //得到父类,然后赋给自己
            tmpClass = tmpClass.getSuperclass();
        }
        List<WorkDeviceRuntime> list = new ArrayList<>();
        for (int j = 0; j < proper.size(); j++) { // 遍历所有属性
            Field field = proper.get(j);
            String name = proper.get(j).getName();
            field.setAccessible(true);
            for (String propertie : properties) {
                if (name.equals(propertie)) {
                    RealSocketField annotation = field.getAnnotation(RealSocketField.class);
                    if (null != annotation) {
                        String devicename = annotation.fieldName();
                        String deviceunit = annotation.unit();
                        WorkDeviceRuntime workDeviceRuntime = new WorkDeviceRuntime();
                        workDeviceRuntime.setLogDeviceValueType(devicename);
                        workDeviceRuntime.setLogDeviceValueUnit(deviceunit);
                        //日志参数的值
                        Object dataValue = field.get(model);
                        workDeviceRuntime.setDeviceLastValue(Double.valueOf(dataValue + ""));
                        list.add(workDeviceRuntime);
                    }

                }
            }
        }
        return list;
    }

使用反射给属性赋值(支持继承)

public static void ObjToStr(Object model) {
        List<Field> proper = new ArrayList<>();
        Class<?> tmpClass = model.getClass();
        while (tmpClass != null && !tmpClass.getName().toLowerCase().equals("java.lang.object")) {
            //当父类为null的时候说明到达了最上层的父类(Object类).
            proper.addAll(Arrays.asList(tmpClass.getDeclaredFields()));
            //得到父类,然后赋给自己
            tmpClass = tmpClass.getSuperclass();
        }
        try {
            for (int j = 0; j < proper.size(); j++) { // 遍历所有属性
                Field field = proper.get(j);
                field.setAccessible(true);
                RealSocketField annotation = field.getAnnotation(RealSocketField.class);

                if (null != annotation) {
                    String unit = annotation.unit();
                    if (!StringUtils.isEmpty(unit)) {
                        Object o = field.get(model);
                        String value = o + " " + unit;
                        field.set(model, value);
                    }
                }


            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值