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 主要是设置父类的数字类型值不能