• 用反射操作数据


      通过反射设置数据,获取数据。代码如下示例。

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    
    /**
     * 工具类
     * Created by doudou on 2018/1/19.
     */
    public class ReflectionUtil {
    
        private ReflectionUtil() {
            throw new AssertionError();
        }
    
        /**
         * 通过反射取对象指定字段(属性)的值
         * @param target 目标对象
         * @param fieldName 字段的名字
         * @return  字段的值
         */
        public static Object getValue(Object target, String fieldName) {
            Class<?> clazz = target.getClass();
            String[] fields = fieldName.split("\.");
    
            try {
                for (int i = 0; i < fields.length - 1; i++) {
                    Field field = clazz.getDeclaredField(fields[i]);
                    field.setAccessible(true);
                    target = field.get(target);
                    clazz = target.getClass();
                }
                Field field = clazz.getDeclaredField(fields[fields.length - 1]);
                field.setAccessible(true);
                return field.get(target);
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static Object setValue(Object target, String fieldName) {
            Class<?> clazz = target.getClass();
            String[] fields = fieldName.split("\.");
            try {
                for (int i = 0; i < fields.length - 1; i++) {
                    Field field = clazz.getDeclaredField(fields[i]);
                    field.setAccessible(true);
                    Object value = field.get(target);
                    if (value == null) {
                        Constructor<?> c = field.getType().getDeclaredConstructor();
                        c.setAccessible(true);
                        value = c.newInstance();
                        field.set(target, value);
                    }
                    target = value;
                    clazz = target.getClass();
                    Field f = clazz.getDeclaredField(fields[fields.length - 1]);
                    f.setAccessible(true);
                    f.set(target, value);
                }
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
  • 相关阅读:
    World Wind Java开发之一(转)
    Excel如何显示隐藏列?
    Oracle开发›如何取出每个分组的第一条记
    如何解决EXCEL中的科学计数法
    使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10
    POI读取单元格信息及单元格公式
    java中判断字符串是否为数字的方法的几种方法
    阿里云OSS的 存储包、下行流量包、回流流量包 三者有啥关系
    vue+datatable+vue-resource动态获取jsonp数据2
    vue+datatable+vue-resource动态获取jsonp数据
  • 原文地址:https://www.cnblogs.com/xinlichai0813/p/8317218.html
Copyright © 2020-2023  润新知