Java 反射給物件賦值
阿新 • • 發佈:2018-12-12
java反射無所不能,辣麼,怎麼通過反射設定一個屬性的值呢? 主程式:
/** * @author tengqingya * @create 2017-03-05 15:54 */ 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());
以上方法得到一個類的Field 屬性,然後設定可見性,然後設定了一個值,最後列印 方法2:
Method setReadOnly = t.getClass().getMethod("setReadOnly", String.class); String s ="test2"; setReadOnly.invoke(t,s); System.out.println(t.getReadOnly());
最後的列印結果: 呼叫方法一test 呼叫方法二settest2 也就是說,第一種方法,沒有呼叫屬性的set方法就完成了賦值,但是第二種方法,是通過呼叫屬性的set方法來完成賦值。 所以,如果想在程式中改變程式的屬性的值的同時還想做一些額外的事情,可以將這些事情寫到set方法中並使用第二種方法哦