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

Java使用反射通过对象属性获取属性的值

代码:

// 通过属性获取传入对象的指定属性的值
public String getValueByPropName(Student student, String propName) {
    String value = null;
    try {
        // 通过属性获取对象的属性
        Field field = student.getClass().getDeclaredField(propName);
        // 对象的属性的访问权限设置为可访问
        field.setAccessible(true);
                    // 获取属性的对应的值
        value = field.get(student).toString();
    } catch (Exception e) {
        return null;
    } 
     
    return value;
}

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 反射的 `invoke` 方法和 `set` 方法的区别是: - `invoke` 方法:可以在运行时调用类中的方法。 - `set` 方法:可以在运行时设置类中的属性。 因此,如果你想在运行时执行类的方法,则使用 `invoke` 方法;如果你想在运行时设置类的属性,则使用 `set` 方法。 ### 回答2: Java反射的invoke方法set方法有以下区别: 1. 功能不同:invoke方法用于调用对象方法,包括获取返回或者可以没有返回方法set方法用于设置对象属性。 2. 参数不同:invoke方法的参数包括要调用的方法名称和对应的参数,它可以是可变参数;set方法的参数只有一个,即要设置的属性。 3. 返回不同:invoke方法可以有返回,根据调用的方法来决定返回类型;set方法没有返回,直接修改对象属性。 4. 关注点不同:invoke方法更关注动态调用,它可以在运行时根据需要调用任何方法;而set方法更关注属性的设置,它可以直接设置对象的某个属性。 5. 使用场景不同:invoke方法适用于需要根据运行时条件来确定调用的方法,例如通过反射调用不同名称的方法set方法适用于需要对对象属性进行赋值的场景。 总的来说,invoke方法set方法Java反射中的两种常用方法,它们在功能、参数、返回、关注点和使用场景上存在一定区别。根据实际需求,我们可以选择使用合适的方法来实现相关功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值