如果要访问Custuner对象的name属性,可以调用getName()方法,但如果只有一个Customer对象实例和一个字符串“name”时,如何设置并获得Customer类属性“name”的值呢?当然还需要使用反射。下面的RefObject类提供可以获得与设置类实例属性的方法:
import java.lang.reflect.*;
public class RefObject {
/**
* 获取对象实例obj的propertyName的属性值
* @param obj - 对象类实例
* @param propertyName - 属性名
* @return - 属性值
*/
public static Object getPropertyValue(Object obj, String propertyName) {
Object result = null;
Class c = obj.getClass(); //获得obj的Class对象
try {
Field f = c.getDeclaredField(propertyName); //获得propertyName表示的属性实例
f.setAccessible(true); //设置private属性可以访问
result = f.get(obj); //获得属性值
}
catch (Exception e) {
result = null;
}
return result;
}
/**
* 设置对象实例obj的propertyName属性值
* @param obj - 对象类实例
* @param propertyName - 属性名
* @param propertyValue - 属性值
*/
public static void setPropertyValue(Object obj, String propertyName, Object propertyValue) {
Class cls = obj.getClass();
try {
Field f = cls.getDeclaredField(propertyName);
f.setAccessible(true);
f.set(obj, propertyValue); //设置属性值
}
|