1. 程式人生 > >Java 反射給物件賦值

Java 反射給物件賦值

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方法中並使用第二種方法哦