首页 > 代码库 > java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值

java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值

标题的意思是:

  通过反射写一个类,类中有个方法。该方法可以设置某个类中的某个属性(构造方法,成员变量,成员方法)为特定的值

 

代码:

  

 1     // 该方法的参数列表是一个类的 类名、成员变量、给变量的赋值
 2     public void setProperty(Object obj, String PropertyName, Object value)
 3             throws NoSuchFieldException, SecurityException,
 4             IllegalArgumentException, IllegalAccessException {
 5 
 6         // 获取obj类的字节文件对象
 7         Class c = obj.getClass();
 8 
 9         // 获取该类的成员变量
10         Field f = c.getDeclaredField(PropertyName);
11 
12         // 取消语言访问检查
13         f.setAccessible(true);
14 
15         // 给变量赋值
16         f.set(obj, value);
17 
18     }

 

测试类:

  

 1 public static void main(String[] args) throws NoSuchFieldException,
 2             SecurityException, IllegalArgumentException, IllegalAccessException {
 3 
 4         // 创建Person类的对象
 5         Person p = new Person();
 6         // 私有成员变量无法直接访问
 7         // 这时候就通过刚刚写的Tool类来直接调用
 8         Tool t = new Tool();
 9         // 通过Tool的方法直接更改私有成员变量name
10         t.setProperty(p, "name", "张三");
11         // 更改未定义类型成员变量
12         t.setProperty(p, "age", 13);
13         // 更改公共成员变量
14         t.setProperty(p, "sex", ‘男‘);
15         System.out.println(p);
16 
17         // 其实除了私有成员变量,其它的都可以通过以前的方法赋值
18     }
19 
20 }
21 
22 class Person {
23     // 该类有私有成员变量,未定义类型成员变量,公共成员变量
24     private String name;
25     int age;
26     public char sex;
27 
28     @Override
29     public String toString() {
30         return name + "--" + sex + "--" + age;
31     }
32 
33 }

 

java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值