通过反射给对象某属性赋值. (常适用于将A对象的同属性值,赋予B对象的相同属性的场景)

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

方法1:(推荐)

        TestReflectSet t = new TestReflectSet();   //对象
        Field f = t.getClass().getDeclaredField("readOnly");    //获取对象属性
        f.setAccessible(true);  //属性打开
        f.set(t, "test");   // 给属性赋值  属性.set(对象,"值")
        System.out.println(t.getReadOnly());
  • 1
  • 2
  • 3
  • 4
  • 5

以上方法得到一个类的Field 属性,然后设置可见性,然后设置了一个值,最后打印 
方法2:

        Method setReadOnly = t.getClass().getMethod("setReadOnly", String.class);
        String s ="test2";
        setReadOnly.invoke(t,s);
        System.out.println(t.getReadOnly());
  • 1
  • 2
  • 3
  • 4

最后的打印结果: 
调用方法一 
test 
调用方法二 
set 
test2 
也就是说,第一种方法,没有调用属性的set方法就完成了赋值,但是第二种方法,是通过调用属性的set方法来完成赋值。 
所以,如果想在程序中改变程序的属性的值的同时还想做一些额外的事情,可以将这些事情写到set方法中并使用第二种方法哦················

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值