/**
 * 根据属性名获取对应的value
 * @param fieldName
 * @param obj
 * @return
 * @throws Exception
 */
private static String getValueByFiled(String fieldName,Object obj)throws Exception{
       //属性扫描器
        PropertyDescriptor pd = new PropertyDescriptor(fieldName, obj.getClass());
        //从属性描述器中获取 get 方法
        Method method = pd.getReadMethod();
        //结果
        Object value = method.invoke(obj);
        //执行方法并返回结果
        return value==null?"":String.valueOf(value);
}

下面是比较完整的

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;
}
//对obj对象的指定字段进行值设置
@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;//返回值
}
}
//调用
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);
}
}
}

参考:http://blog.csdn.net/qq_34120041/article/details/53665526

通过PropertyDescriptor反射进行字段名值的获取及设置相关推荐

  1. C/C++注册表【4】键值的获取,设置,删除,枚举

    C/C++注册表[4]键值的获取,设置,删除,枚举 1.键值的获取: LONG WINAPI RegQueryValueEx(HKEY hKey, //一个已打开项的句柄,或者指定一个标准项名LPCT ...

  2. 小程序开发--- 1. 获取数组中某个字段的值或获取列表索引

    最近开始自己琢磨开发微信小程序,遇到些问题,现在做一下总结. 今天有遇到一个需要获取到列表中某一项值,并在其他地方调用的问题.其实思路和获取列表索引的道理一样.如果你还不知道如何获取列表的索引,那么现 ...

  3. 如何获取java对象的字段名_Java如何获取类对象的字段?

    下面的示例使用反射获取类对象的字段.我们将获取字段名称及其对应的类型.下面显示了三种可用于获取对象字段的方式:Class.getDeclaredFields() Class.getFields() C ...

  4. JQuery EasyUi控件值的获取与设置

     1. 值的设置 dateTimeBox $('#StartDate').val(startTime); dateBox $('#StartDate').datebox('setValue', s ...

  5. js获取classname值_js获取和设置DIV元素class值的方法

    web页面中,利用js动态的改变div元素的class属性的值,可以实现很多的动态效果.比如动态修改div元素的背景颜色,改变字体的颜色等等.这篇文章就来说一说,javascript 如何获取和设置d ...

  6. Redis可以登录,但有些值不能获取或者设置,PING命令也用不了

    MISCONF Redis is configured to save RDB snapshots 今天在redis中执行setrange name 1 chun 命令时报了如下错误提示: (erro ...

  7. html+设置img+src属性值,javascript获取、设置修改img的src属性(get/setAttribute)

    在开发网站过程中,事先就设置好了图片img的src性,一般来说很少修改这个属性,网站加载时直接显示事先设置好的图片.但如果网页要求实现滚屏加载图片(动态加载图片),也就是一次不显示网页内的所有图片,当 ...

  8. Java通过PropertyDescriptor反射获取和操作字段,

    参考: java反射调用getset方法,你还在拼接方法名吗? - 百度文库 如何判断某个类是否有某个注解?_打酱油的葫芦娃的博客-CSDN博客_判断注解 通过PropertyDescriptor反射 ...

  9. angularjs 获取复选框的值_侠客行第二季来袭,教你如何快速获取侠名值_DNF游戏新闻 - 地下城与勇士 - DNF...

    导读侠客行这个活动相信大家都不陌生,前不久第一季侠客行刚刚结束,经过短暂的调整,第二季侠客行再次上线,这次侠客行的奖励和第一季相比还是有所差异的,虽然没有天空可以兑换,但是其他奖励也是不错的,下面就来 ...

最新文章

  1. Nginx配置文件nginx.conf中文详解(转)
  2. Understanding Quaternions 中文翻译《理解四元数》
  3. JavaFX之TableView的MenuButton
  4. 第一节 7算述运算符
  5. 归档和解档-Archiver
  6. JobTracker和TaskTracker
  7. docker镜像没有ifconfig、ping指令
  8. 从头开发一个 RPC 是种怎样的体验?
  9. php之类重写父类的构造方法,php实现parent调用父类的构造方法与被覆写的方法
  10. 输入网址到出现页面的过程
  11. 文件上传利器SWFUpload入门简易教程(转)
  12. VS2022怎么取消背景或者删除主题
  13. 速读原著-TCP/IP(SNMP示例)
  14. unity3D用鼠标和射线控制物体移动(一)
  15. 百度导航hd android,百度导航hd版-百度导航hd版下载-安卓手机4.5.1APP免费软件-最笨下载...
  16. C# 如何在Word文档中插入艺术字
  17. PD虚拟机的三种网络模式
  18. 系统动力学软件vensim之指数增长
  19. node-v14.21版本的下载安装
  20. 自考本科计算机科学与技术有哪些科目,自考本科有计算机科学与技术专业吗?...

热门文章

  1. 使用tooltip弹出图片
  2. windows释放隐藏分区
  3. 04.23 homework
  4. java计算机毕业设计在线影视系统源程序+mysql+系统+lw文档+远程调试
  5. win10永恒之黑漏洞复现
  6. java笔试面试题及答案(华为篇)
  7. WPF Convert和RelativeSource
  8. Vim+ Total Command
  9. 2016-2017-2 《Java程序设计》预备作业2总结
  10. qt connect重复 槽函数会重复触发