Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样:/***TODO直接设置对象属性值,忽略private/protected修饰符,也不经过setter*@authorE.FLY*@date2013-12-7*@time下午...
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 exceptione.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);这种方式也徒劳主要是设置父类的数字类型值不能
展开