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 }
开始在code,我的个人特色。