PropertyDescriptor 详解

PropertyDescriptor 详解PropertyDescriptor详解](http://blog.csdn.net/z69183787/article/details/8443777)转自http://blog.csdn.net/z69183787/article/details/8443777packagecom.zhoushun;importjava.lang.reflect.Method;importjava


Jetbrains全系列IDE稳定放心使用

PropertyDescriptor 详解](http://blog.csdn.net/z69183787/article/details/8443777)


转自 http://blog.csdn.net/z69183787/article/details/8443777
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;//返回值
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/187020.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MessageDigest类的使用

    MessageDigest类的使用随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)在前面java中的MessageDigest类中简要介绍了它的一些作用和方法,下面给个例子,对文件和字符串MD5分别给了两个例子,代码如下:packagecom.home;importjava.io….

    2022年6月17日
  • pycharm最新激活码-激活码分享「建议收藏」

    (pycharm最新激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
  • gradle下载太慢_苹果6网络慢怎么解决

    gradle下载太慢_苹果6网络慢怎么解决由于网络的原因,有些地方连接下载Gradle没问题,有些地方就不行,所以需要想办法解决先说下载,打开文件gradle-wrapper.properties文件,修改distributionUrl把services.gradle.org改成downloads.gradle-dn.com当然这方法可能有些地方不行,实在不行就上代理吧再说Gradle下载jar包慢,在build.gradle文件的repositories{}内添加上阿里的仓库当然,如果添加了阿里仓库还不行的话只能找其他方

    2022年10月25日
  • Android系统默认Home应用程序(Launcher)的启动过程源码分析

    Android系统默认Home应用程序(Launcher)的启动过程源码分析

    2021年12月15日
  • a标签去下划线或文字添加下修饰_a标签去掉下划线_百度经验「建议收藏」

    a标签去下划线或文字添加下修饰_a标签去掉下划线_百度经验「建议收藏」是默认有下划线的。所以有时候为了美观,我们需要去掉下划线,使网页更加美观正常状态下的a标签是这样的。去掉下划线只需要在样式里面加入a{text-decoration:none;}或者这里是A标签还有更加详细的设置。a:link{text-decoration:none;/*指正常的未被访问过的链接*/}a:visited{text-decoration:none;/*指已经访问过的链接*…

    2022年6月1日
  • matlab的trapz求定积分_matlab求离散点积分

    matlab的trapz求定积分_matlab求离散点积分EDA365欢迎您登录!您需要登录才可以下载或查看,没有帐号?注册x(T(B3I-e%Q&H3mtrapz是基于梯形法则的离散点积分函数。调用形式:6H*C!TA0dI=trapz(x,y)g3];x1g(x!w(Kh+R%R3G6`其中x和y分别是自变量和对应函数值,以sin(x)在[0,pi]积分为例:/p…

    2022年10月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号