java使用反射给对象属性赋值的两种方法

来源:互联网 发布:网盘源码系统 编辑:程序博客网 时间:2024/05/16 13:01

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
调用方法二
set
test2
也就是说,第一种方法,没有调用属性的set方法就完成了赋值,但是第二种方法,是通过调用属性的set方法来完成赋值。
所以,如果想在程序中改变程序的属性的值的同时还想做一些额外的事情,可以将这些事情写到set方法中并使用第二种方法哦················

0 0