对于Java的反射因为不是经常使用,所以记录一下,方便自己查阅
getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
setAccessible():设置为true就可以通过反射获取私有变量的值
invoke(): Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,返回值总是对象。
测试类:
public class Test {
private String name;
public String getName() {
return name;
}
public void setName( String name) {
this.name= name;
}
}
方法1:
Test t = new Test();
Field f = t.getClass().getDeclaredField("name");
f.setAccessible(true);
f.set(t, "test1");
System.out.println(t.getName());
方法2:
Test t = new Test();
Method setName = t.getClass().getMethod("setName", String.class);
String s ="test2";
setName.invoke(t,s);
System.out.println(t.getName());