importjava.beans.IntrospectionException;importjava.beans.PropertyDescriptor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;public classPropertyUtil {private static final String SET_PREFIX = "set";private static final String IS_PREFIX = "is";private static final String GET_PREFIX = "get";public static PropertyDescriptor getPropertyDescriptor(Class> clazz, String propertyName) {//根据需求,定制 自己的get和set方法
Method setMethod = null;
Method getMethod= null;
PropertyDescriptor pd= null;try{
Field field= clazz.getDeclaredField(propertyName);//根据字段名来获取字段
if (field != null) {//构建方法的后缀
String methodEnd = propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
setMethod= clazz.getDeclaredMethod(SET_PREFIX + methodEnd, newClass[] { field.getType() });//构建get 方法
getMethod = clazz.getDeclaredMethod(GET_PREFIX + methodEnd, newClass[] {});//构建一个属性描述器 把对应属性 propertyName 的 get 和 set 方法保存到属性描述器中
pd = newPropertyDescriptor(propertyName, getMethod, setMethod);
}
}catch(Exception ex) {
ex.printStackTrace();
}returnpd;
}public static PropertyDescriptor getPropertyDescriptor2(Class> clazz, String propertyName) {//使用 PropertyDescriptor 提供的 get和set方法
try{return newPropertyDescriptor(propertyName, clazz);
}catch(IntrospectionException e) {
e.printStackTrace();
}return null;
}public static voidsetProperty(Object obj, String propertyName, Object value) {
Class> clazz = obj.getClass();//获取对象的类型
PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName);//获取//clazz//类型中的//propertyName//的属性描述器
Method setMethod = pd.getWriteMethod();//从属性描述器中获取 set 方法
try{
setMethod.invoke(obj,new Object[] { value });//调用 set//方法将传入的value值保存属性中去
} catch(Exception e) {
e.printStackTrace();
}
}public staticObject getProperty(Object obj, String propertyName) {
Class> clazz = obj.getClass();//获取对象的类型
PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName);//获取//clazz//类型中的//propertyName//的属性描述器
Method getMethod = pd.getReadMethod();//从属性描述器中获取 get 方法
Object value = null;try{
value= getMethod.invoke(clazz, new Object[] {});//调用方法获取方法的返回值
} catch(Exception e) {
e.printStackTrace();
}return value;//返回值
}
}