全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java通过PropertyDescriptor反射调用set和get方法

本文实例为大家分享了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小时内与您取得联系。