java 反射调用set_反射调用 java bean的set和get方法

本文介绍了如何使用Java反射机制调用Java Bean的set和get方法。通过PropertyUtil类展示了如何获取并执行setMethod和getMethod,包括getPropertyDescriptor方法用于获取属性描述器,setProperty和getProperty方法用于设置和获取对象的属性值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;//返回值

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值