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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CAP理论中, P(partition tolerance, 分区容错性)的合理解释

    CAP理论中, P(partition tolerance, 分区容错性)的合理解释在CAP理论中,对partitiontolerance分区容错性的解释一般指的是分布式网络中部分网络不可用时,系统依然正常对外提供服务,而传统的系统设计中往往将这个放在最后一位.这篇文章对这个此进行了分析和重新定义,并说明了在不同规模分布式系统中的重要性.The‘CAP’theoremisahottopicinthedesignofdistributeddat…

    2022年7月25日
    21
  • mac如何删除隐藏文件_如何显示系统隐藏文件

    mac如何删除隐藏文件_如何显示系统隐藏文件U盘和移动硬盘接入Mac时会产生.Trashes,.Spotlight-V100,.fseventsd等文件每插入Mac一次,都会检查是否有这些文件,如果没有,就会创建这些文件特别是有时候,在文件

    2022年8月4日
    67
  • VS2015序列号_Idm序列号无效了

    VS2015序列号_Idm序列号无效了1、VS2008简体中文正式版序列号1.VisualStudio2008ProfessionalEdition:XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT2.VisualStudio2008TeamTestLoadAgent:WPX3J-BXC3W-BPYWP-PJ8CM-F7M8T3.VisualStudio2008TeamSyst…

    2022年8月10日
    10
  • bool 函数用法「建议收藏」

    bool 函数用法「建议收藏」 BOOL是布尔型变量,也就是逻辑型变量的定义符,类似于float、double等,只不过float定义浮点型,double定义双精度浮点型。在objective-c中提供了相似的类型BOOL,它具有YES值和NO值。布尔型变量的值只有真(true)和假(false),可用于逻辑表达式,也就是“或”“与”“非”之类的逻辑运算和大于小于之类的关系运算,逻辑表达式运算结果为真或为假。(百科) …

    2022年4月28日
    111
  • 超详细VSCode安装教程(Windows)「建议收藏」

    本文基于Windows系统博主的VSCode专栏:分享使用VSCode的基本操作与各种技巧

    2022年4月4日
    150
  • C++ this指针

    C++ this指针this指针引言:首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。注意:this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于…

    2022年5月17日
    44

发表回复

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

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