标题的意思是:
通过反射写一个类,类中有个方法。该方法可以设置某个类中的某个属性(构造方法,成员变量,成员方法)为特定的值
代码:
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 }
时间: 2024-10-16 21:00:45