首页 > 技术文章 > Java里面,反射父类里面数字类型字段,怎么set值

eFLY 2014-01-06 10:25 原文

Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样:
     /**
     * TODO 直接设置对象属性值, 忽略private/protected 修饰符, 也不经过setter   
     * @author E.FLY
     * @date 2013-12-7
     * @time 下午03:55:05
     * @param object 子类对象
     * @param fieldName 父类中的属性名
     * @param value 将要设置的值
     */
    public static void setFieldValue(Object object, String fieldName, Object value){
        Field field = getDeclaredField(object, fieldName);
        //抑制Java对方法进行检查,主要是针对私有方法而言
        field.setAccessible(true);

        try { 
            field.set(object, value);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
     /**
     * TODO 循环向上转型,获取对象的DeclaredMethod   
     * @author E.FLY
     * @date 2013-12-7
     * @time 下午03:39:45
     * @param object 子类对象
     * @param methodName 父类中的方法名
     * @return 父类中的方法对象
     */
    private static Field getDeclaredField(Object object, String fieldName){
        Field field = null;
        Class<?> clazz = object.getClass();
        for(; clazz != Object.class; clazz = clazz.getSuperclass()) {
            try {
                return  field = clazz.getDeclaredField(fieldName);
            } catch (Exception e) {
                //这里甚么都不要做!并且这里的异常必须这样写,不能抛出去
                //如果这里的异常打印或者往外抛,则就不会执行
                //clazz = clazz.getSuperclass();//最后就不会进入到父类中了
            }
        }
        return null;
    }

直接调用:setFieldValue(obj, name, value);方法,可是除了数字类型的不能set值成功,String类型的可以哦。
原理一样,用method.invoke(object, parameters);这种方式也徒劳
45度C  10:12:53
主要是设置父类的数字类型值不能

 

 

推荐阅读