// 通过属性获取传入对象的指定属性的值
public String getValueByPropName(Student student,String propName) {
String value = null;
try {
// 通过属性获取对象的属性
//.getDeclaredFields() 获得某个类的所有声明的字段,即包括public、private和proteced但不包括父类申明字段
//.getClass() 是⼀个对象实例的⽅法,只有对象实例才有这个⽅法,具体的类是没有的
Field field = student.getClass().getDeclaredField(propName);
// 对象的属性的访问权限设置为可访问
//允许获取实体类private的参数信息
field.setAccessible(true);
// 获取属性的对应的值
value = field.get(student).toString();
} catch (Exception e) {
return null;
}
return value;
}
//主程序
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 属性,
Field f = t.getClass().getDeclaredField("readOnly");
//然后设置可见性,然后设置了一个值,最后打印
f.setAccessible(true);
f.set(t, "test");
System.out.println(t.getReadOnly());
//方法2:
//通过调用属性的set方法来完成赋值。
Method setReadOnly = t.getClass().getMethod("setReadOnly", String.class);
String s ="test2";
setReadOnly.invoke(t,s);
System.out.println(t.getReadOnly());