A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuhyoung 中级黑马   /  2014-5-24 13:45  /  1272 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

通过反射获取了属性
                Class clazz = obj.getClass();               
                Field field = clazz.getField(propertyName);

可以用什么方法对获取的属性进行操作,例如对属性值重新赋值。

7 个回复

倒序浏览
  
                        //采用暴力反射方式进行访问,也就是强制进行访问
                        field.setAccessible(true);
                        //用set方法重新赋值
                        field.set(obj, value);

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
希望下面这段学习代码能帮助到你:
  1. import java.lang.reflect.*;

  2. public class ReflectPoint {
  3.         public int y;
  4.         private int x;
  5.         public ReflectPoint(int x, int y) {
  6.                 super();
  7.                 this.x = x;
  8.                 this.y = y;
  9.         }
  10. }

  11. public class FieldTest {
  12.         public static void main(String[] args) throws Exception {
  13.                 ReflectPoint pt1 = new ReflectPoint(3,5);       
  14.                
  15.                 //获取public属性的属性
  16.                 Field fieldY = pt1.getClass().getField("y");       
  17.                 //使用get能够获取属性值
  18.                 System.out.println(fieldY.get(pt1)); //输出5
  19.                 //使用set能够设置属性值,set的入参时需要操作的对象和需要设置的值,表示把某个对象的该属性设置成这个值
  20.                 fieldY.set(pt1, 8);
  21.                 System.out.println(fieldY.get(pt1)); //输出8
  22.                
  23.                
  24.                 //获取私有成员变量,与获取public的属性不同
  25.                 Field fieldX = pt1.getClass().getDeclaredField("x");
  26.                 //私有变量默认不可以访问,可以使用setAccessible设置其可以访问和设置
  27.                 fieldX.setAccessible(true);
  28.                 System.out.println(fieldX.get(pt1));//输出3
  29.                 //这里表明可以通过反射对private变量进行操作(一般方法是不能访问private变量的)
  30.                 fieldX.set(pt1, 5);
  31.                 System.out.println(fieldX.get(pt1)); //输出5
  32.         }
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
屈_zi 发表于 2014-5-24 15:07
希望下面这段学习代码能帮助到你:

谢谢:lol:lol
回复 使用道具 举报
顶一下。。。。。
回复 使用道具 举报
Dark_Horse 发表于 2014-5-24 13:49
//采用暴力反射方式进行访问,也就是强制进行访问
                        fi ...

谢谢:lol:lol
回复 使用道具 举报

不客气,我是新手,多多交流.....
回复 使用道具 举报
素质 中级黑马 2014-5-24 17:12:03
8#
field.set(Object,value) 对反射的字段进行设定值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马