java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

//------------------------------------------------我是代码的分割线

// 首选是一个工具类,在该工具类里面,定义了一个方法,public void setProperty (Object obj, String propertyName, Object value)

// Object obj:所要使用的字节码class对象,String propertyName:所要获取对象的propertyName成员变量,Object value :给对象的成员变量赋值为指定的值--->value

// 就介绍到这里,直接上代码:首选是反射的工具类

 1 import java.lang.reflect.Field;
 2 
 3 public class Tool {
 4     public void setProperty(Object obj, String propertyName, Object value)
 5             throws NoSuchFieldException, SecurityException,
 6             IllegalArgumentException, IllegalAccessException {
 7         // 根绝对象获取字节码文件
 8         Class c = obj.getClass();
 9         // 获取该对象的propertyName成员变量
10         Field field = c.getDeclaredField(propertyName);  //注意你是通过参数来获取,不许加双引号“”
11         // 取消访问检查
12         field.setAccessible(true);
13         // 给对象的成员变量赋值为指定的值--->value
14         field.set(obj, value);
15     }
16 }

//-------------------------------------------

//下面的是测试类,就是使用该工具类,经参数传递过去。。。

 1 public class ToolDemo {
 2     public static void main(String[] args) throws NoSuchFieldException,
 3             SecurityException, IllegalArgumentException, IllegalAccessException {
 4         Person p = new Person();
 5 
 6         Tool tool = new Tool();
 7         tool.setProperty(p, "name", "java");
 8         tool.setProperty(p, "age", 20);
 9 
10         System.out.println(p);
11         System.out.println("---------");
12         Dog d = new Dog();
13         tool.setProperty(d, "sex", '男');
14         tool.setProperty(d, "price", 12.34f);
15         System.out.println(d);
16     }
17 }
18 class Dog{
19     private char sex;
20     float price;
21     
22     public String toString() {
23         return sex + "---" + price;
24     }
25 }
26 class Person {
27 
28     private String name; // 此处name是私有的,外界是无法访问的。
29     public int age;
30 
31     @Override
32     public String toString() {
33         return name + "---" + age;
34     }
35 }

 

posted @ 2016-04-26 20:43  我所向往的美好  阅读(1817)  评论(0编辑  收藏  举报