java使用反射给对象属性赋值的两种方法
主程序:
/**
*/
public class TestReflectSet {
private String readOnly;
public String getReadOnly() {
return readOnly;
}
public void setReadOnly( String readOnly ) {
System.out.println("set");
this.readOnly = readOnly;
}
}
方法1:
TestReflectSet t = new TestReflectSet();
Field f = t.getClass().getDeclaredField("readOnly");
f.setAccessible(true);
f.set(t, "test");
System.out.println(t.getReadOnly());
方法2:
Method setReadOnly = t.getClass().getMethod("setReadOnly", String.class);
String s ="test2";
setReadOnly.invoke(t,s);
System.out.println(t.getReadOnly());
最后的打印结果:
调用方法一
test
调用方法二
set
test2
也就是说,第一种方法,没有调用属性的set方法就完成了赋值,但是第二种方法,是通过调用属性的set方法来完成赋值。
本文详细介绍了Java中使用反射给对象属性赋值的两种方法:直接通过Field设置和调用setter方法。第一种方式绕过了setter方法直接修改属性,第二种方式遵循了常规的setter调用。实验结果显示,第一种方法不触发setter方法,而第二种方法则会执行setter方法。

被折叠的 条评论
为什么被折叠?



