本文实例为大家分享了PropertyDescriptor反射调用set和get方法,供大家参考,具体内容如下

第一段:
package com.zhoushun;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.beans.PropertyDescriptor;
public class PropertyUtil {
@SuppressWarnings("unchecked")
public static PropertyDescriptor getPropertyDescriptor(Class clazz, String propertyName) {
StringBuffer sb = new StringBuffer();//构建一个可变字符串用来构建方法名称
Method setMethod = null;
Method getMethod = null;
PropertyDescriptor pd = null;
try {
Field f = clazz.getDeclaredField(propertyName);//根据字段名来获取字段
if (f!= null) {
//构建方法的后缀
String methodEnd = propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
sb.append("set" + methodEnd);//构建set方法
setMethod = clazz.getDeclaredMethod(sb.toString(), new Class[]{ f.getType() });
sb.delete(0, sb.length());//清空整个可变字符串
sb.append("get" + methodEnd);//构建get方法
//构建get 方法
getMethod = clazz.getDeclaredMethod(sb.toString(), new Class[]{ });
//构建一个属性描述器 把对应属性 propertyName 的 get 和 set 方法保存到属性描述器中
pd = new PropertyDescriptor(propertyName, getMethod, setMethod);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return pd;
}
@SuppressWarnings("unchecked")
public static void setProperty(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();
}
}
@SuppressWarnings("unchecked")
public static Object 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;//返回值
}
}
第二段:
public boolean setValue(Object objSet, Object objGet)
throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, IntrospectionException
{
boolean flag = true;
Field fields[] = objSet.getClass().getDeclaredFields();
String value = "";
String fieldNameGet = "";
List list = new ArrayList();
Field afield[];
int j = (afield = fields).length;
for(int i = 0; i < j; i++)
{
Field field = afield[i];
String fieldName = field.getName();
fieldNameGet = xmlToModel(fieldName);
if(!"error".equals(fieldNameGet))
{
PropertyDescriptor pd = new PropertyDescriptor(fieldNameGet, objGet.getClass());
Method getMethod = pd.getReadMethod();
value = String.valueOf(getMethod.invoke(objGet, new Object[0]));
boolean checkResult = returnMessage.checkValue(value, fieldNameGet);
if(checkResult)
{
PropertyDescriptor pd1 = new PropertyDescriptor(fieldName, objSet.getClass());
Method setMethod = pd1.getWriteMethod();
setMethod.invoke(objSet, new Object[] {
field.getType().getConstructor(new Class[] {
java/lang/String
}).newInstance(new Object[] {
value
})
});
} else
{
flag = checkResult;
}
}
}
return flag;
}
第三段:
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("TaskProvidePropsList");//这里的类名是全名。。有包的话要加上包名
Object obj = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
//写数据
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method wM = pd.getWriteMethod();//获得写方法
wM.invoke(obj, 2);//因为知道是int类型的属性,所以传个int过去就是了。。实际情况中需要判断下他的参数类型
}
//读数据
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method rM = pd.getReadMethod();//获得读方法
Integer num = (Integer) rM.invoke(obj);//因为知道是int类型的属性,所以转换成integer就是了。。也可以不转换直接打印
System.out.println(num);
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# PropertyDescriptor
# 反射
# Java如何加载外部Jar的类并通过反射调用类的方法
# java反射调用方法NoSuchMethodException的解决方案
# java 反射调用Service导致Spring注入Dao失效的解决方案
# Java 使用反射调用jar包中的类方式
# Java使用反射调用方法示例
# java中利用反射调用另一类的private方法的简单实例
# Java 反射调用静态方法的简单实例
# 反射调用private方法实践(php、java)
# java反射调用get/set方法实现
# 器中
# 返回值
# 构建一个
# 实际情况
# 中去
# 大家分享
# 转换成
# 具体内容
# 大家多多
# 清空
# 第二段
# 字段名
# 第三段
# methodEnd
# println
# append
# toUpperCase
# substring
# getDeclaredField
# pd
相关文章:
中山网站制作网页,中山新生登记系统登记流程?
TestNG的testng.xml配置文件怎么写
如何快速查询网站的真实建站时间?
,柠檬视频怎样兑换vip?
网站制作报价单模板图片,小松挖机官方网站报价?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
如何在阿里云ECS服务器部署织梦CMS网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
建站之星多图banner生成与模板自定义指南
怎么将XML数据可视化 D3.js加载XML
如何在Windows虚拟主机上快速搭建网站?
婚礼视频制作网站,学习*后期制作的网站有哪些?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
如何快速搭建高效简练网站?
如何在香港服务器上快速搭建免备案网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何在VPS电脑上快速搭建网站?
广州商城建站系统开发成本与周期如何控制?
如何在阿里云香港服务器快速搭建网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
音响网站制作视频教程,隆霸音响官方网站?
如何通过VPS建站无需域名直接访问?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
常州企业建站如何选择最佳模板?
小型网站制作HTML,*游戏网站怎么搭建?
如何用IIS7快速搭建并优化网站站点?
电商网站制作公司有哪些,1688网是什么意思?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何快速建站并高效导出源代码?
制作网站怎么制作,*游戏网站怎么搭建?
公司网站的制作公司,企业网站制作基本流程有哪些?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
建站之星3.0如何解决常见操作问题?
如何在阿里云购买域名并搭建网站?
再谈Python中的字符串与字符编码(推荐)
如何在七牛云存储上搭建网站并设置自定义域名?
如何用西部建站助手快速创建专业网站?
建站之星免费模板:自助建站系统与智能响应式一键生成
如何通过虚拟主机快速搭建个人网站?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
金*站制作公司有哪些,金华教育集团官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。