PropertyDescriptor 类表示 JavaBean 类通过存储器导出一个属性。

构造方法有:

PropertyDescriptor(String propertyName, Class<?> beanClass)PropertyDescriptor(String propertyName, Class<?> beanClass, String readMethodName, String writeMethodName)PropertyDescriptor(String propertyName, Method readMethod, Method writeMethod)

常用方法有:

Class<?> getPropertyType() // 获取属性的java类型对象
Method getReadMethod() // 获得用于读取属性值的方法
Method getWriteMethod() // 获得用于写入属性值的方法
void setReadMethod(Method readMethod) // Sets the method that should be used to read the property value.
void setWriteMethod(Method writeMethod) //Sets the method that should be used to write the property value.

用法:

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;/*** Created by zhuqiuhui on 2017/11/15.*/
public class PropertyUtil {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 方法getMethod = clazz.getDeclaredMethod(sb.toString(), new Class[]{});//构建一个属性描述器 把对应属性 propertyName 的 get 和 set 方法保存到属性描述器中pd = new PropertyDescriptor(propertyName, getMethod, setMethod);}} catch (Exception ex) {ex.printStackTrace();}return pd;}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();}}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 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用法相关推荐

  1. java中import用法

    java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...

  2. java中extends用法_JAVA的extends用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  3. java中continue用法

    java中continue用法 有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 java提供了 continue 语句.continue ...

  4. java中switch用法举例范围_Java中Switch用法代码示例

    一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1.7后 ...

  5. java中Iterator用法总结

    Java中Iterator用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级& ...

  6. java中nextInt()用法

    java中nextInt用法 功能 函数实现 三级目录 功能 给定一个参数n,nextInt(n)将返回一个大于等于0小于n的随机数,即:0 <= nextInt(n) < n. 函数实现 ...

  7. cal java中的用法_Java中static用法

    Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...

  8. JAVA中throw用法例子,Java Optional orElseThrow()用法及代码示例

    Java中的java.util.Optional类的orElseThrow()方法用于获取此Optional实例(如果存在)的值.如果此Optional实例中不存在任何值,则此方法将引发从指定供应商生 ...

  9. JAVA中this用法小结

    我知道很多朋友都和我一样:在JAVA程序中似乎经常见到"this",自己也偶尔用到它,但是到底"this"该怎么用,却心中无数!很多人一提起它,就说" ...

最新文章

  1. 基于i2c子系统的驱动分析
  2. AS升级3.0,gradle plugin 升级到3.0.0遇到的问题
  3. sql server2008中左连接,右连接,等值连接的区别
  4. SSL证书如何工作?
  5. oracle--表,用户,授权
  6. UVALive - 7163
  7. 在线版本powerbi的使用!开启您的商业智能!
  8. awk 求三角形重心
  9. OpenGL Single Point单点移动三角形的实例
  10. ☆聊聊Spring系列_Index
  11. Use BAdI to link appointment to a given opportunity during creation
  12. 电脑技巧:如何解决99%的电脑防弹窗广告?
  13. phaser java_【Java并发编程实战】-----“J.U.C”:Phaser
  14. 电脑自带的画图工具怎么使用笔刷
  15. 当子元素设置position absolute的时,父元素必须设置position属性
  16. C语言线程实例(生产者和消费者),Java多线程:生产者与消费者(1)
  17. ios识别人脸自动拍照_利用openCV实现自动抓拍,人脸识别,清晰度的验证等
  18. 洛谷 P1359 租用游艇(Floyd, Dijkstra,SPFA)
  19. Codeforces 1324D Pair of Topics
  20. Go面试题——log.fatal和panic的区别

热门文章

  1. 思雨搜索框架name的书写格式
  2. Activiti之多实例任务
  3. 储存区域网路(SAN)-使用Linux(Centos5)来做iSCSI Target 篇
  4. 孙溟㠭(展)为秘鲁总统‘阿尔弗雷多托雷多‘先生治印,篆刻印章
  5. DCM4CHE的使用
  6. Shopee竞争对手分析,从这5点入手
  7. 女程序猿的苦恼:“26岁后,分手对我来说不是件容易的事情”
  8. c++ 独一无二的不可拷贝拷贝对象
  9. 二重积分和雅可比行列式
  10. 丫蛋蛋/沈虫虫-归去来-LRC歌词