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


相关推荐

  • 为什么要用 Bootstrap

    [Bootstrap](http://hovertree.com/menu/bootstrap/)是由两个twitter员工开发并开源的前端框架,非常火爆,而如此火爆自然有它的道理,在我们团队的

    2021年12月26日
    45
  • 使用线程池来创建线程的方法_线程池多线程实现

    使用线程池来创建线程的方法_线程池多线程实现1.如何使用线程池来创建线程?java中提供了一个静态工厂方法来创建不同的线程池: Executors通过静态方法创建出的线程都实现了ExecutorService接口。常用的方法包括:newFixedThreadPool(intthreads);创建一个固定数目的线程池newCachedThreadPool();创建一个可缓存的线程池,调用execute方法将重用以前…

    2022年10月21日
    3
  • Linux下安装mysql-8.0.21

    Linux下安装mysql-8.0.21转载原文https://www.jianshu.com/p/4587e9429702下面记录了我在Linux(Centos7)环境下安装Mysql的完整过程,实操记录,绝非水文,如有错误或遗漏,欢迎指正。安装过程中务必保证文件路径的前后统一,否则可能会导致不可预期的结果,推荐直接使用文中的命令进行操作。一安装前准备1、检查是否已经安装过mysql,执行命令[root@localhost/]#rpm-qa|grepmysql从执行结果,可以看出我们已经安装了

    2022年5月10日
    65
  • 软件项目管理案例分析

    软件项目管理案例分析高水平项目管理是软件项目成功的关键,也是软件产品质量的根本保证,具有这方面理论和实践的人员是目前软件组织中急需的高层次人才。为建立符合中国国情的软件开发过程和组织体系,培训中心特举办“软件项目管理案例分析”培训班,具体事宜通知如下:一、培训对象软件开发机构高级管理人员、项目经理、系统架构师、系统分析师、资深开发人员、质量保证人员以及其他对提升软件开发质量负有责任的人员。二、学员基础

    2022年5月22日
    39
  • JSONObject使用方法详解

    JSONObject使用方法详解/***项目名称:tools*项目包名:com.songfayuantools.json*创建时间:2017年7月31日上午11:58:51*创建者:Administrator-宋发元*创建地点:*/packagecom.songfayuantools.json;importcom.songfayuantools.entity.UserInfo;im

    2022年7月13日
    15
  • 简单window.open()使用方法和按钮关闭window.open页面

    简单window.open()使用方法和按钮关闭window.open页面简单window.open()使用方法和按钮关闭window.open页面

    2022年4月23日
    148

发表回复

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

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