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;
}

猜你喜欢

转载自blog.csdn.net/u012045045/article/details/84631054