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


相关推荐

  • pccharm激活码[在线序列号]

    pccharm激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    69
  • KNative_buenas

    KNative_buenasKnative 简介

    2022年4月20日
    35
  • 比较复杂的sql面试题「建议收藏」

    一、分组统计每个班的分数前三名(等同于LeetCode:185. DepartmentTopThreeSalaries)表结构:createtablestudent(idvarchar(20),–编号classvarchar(20),–年级scoreint–分数);insertstudentvalues(‘1′,’一年级’,82);…

    2022年4月13日
    110
  • Otacle表查询

    Otacle表查询

    2021年12月10日
    57
  • vmware15激活码[在线序列号]

    vmware15激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    343
  • 海外代理服务器有哪些好处?[通俗易懂]

    海外代理服务器有哪些好处?[通俗易懂]国外代理服务器的配置分为服务器端和客户端两部分,其中服务器端的配置包括用户创建、管理、监控、统计、分析、查询等功能。但是,这一工作通常都是由因特网服务商或专门的网络管理员来完成,对于一般拨号用户来说,海外代理服务器的配置实际上是指客户机的配置,具体的好处包括以下几点。1、能够有效地提高访问速度。一般来说,最好的海外代理服务器会预先设置一个更大的硬盘缓冲区,以便能够容纳足够多的数据,因此,当有外来信息通过时,该缓冲区的容量非常大,便于将外来信息保存到缓冲区中。国外代理服务器采用这种方式,当又有其他用户可.

    2022年6月8日
    40

发表回复

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

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