Java 之 PropertyDescriptor[通俗易懂]

Java 之 PropertyDescriptor[通俗易懂]PropertyDescriptor描述了一个JavaBean属性的一对访问方法即getter和setter。常用的构造方法是PropertyDescriptor(Stringproperty

大家好,又见面了,我是你们的朋友全栈君。

   PropertyDescriptor 描述了一个JavaBean 属性的一对访问方法即 getter和setter。

常用的构造方法是PropertyDescriptor(String propertyName,Class<?> beanClass);

propertyName就是属性的名称,beanClass就是这个属性对应属于哪个对象的Class.

/**
 *
 * @author zhangwei_david
 * @version $Id: PropertyDescriptorDemo.java, v 0.1 2015年5月25日 下午8:17:59 zhangwei_david Exp $
 */
public class PropertyDescriptorDemo {

    /**
     *
     * @param args
     * @throws IntrospectionException
     * @throws InvocationTargetException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public static void main(String[] args) throws IntrospectionException, IllegalAccessException,
    IllegalArgumentException, InvocationTargetException {
        // bean的实例
        Form form = new PropertyDescriptorDemo().new Form();
        // 创建属性name 的PropertyDescriptor
        PropertyDescriptor pd = new PropertyDescriptor("name", form.getClass());
        // 获取属性的setter方法
        Method writer = pd.getWriteMethod();
        // 反射调用setter方法设置值
        writer.invoke(form, "TEST");
        // 输入setter以后的结果
        System.out.println(form.getName());
        // 获取getter方法
        Method reader = pd.getReadMethod();
        // 获取属性值
        String value = (String) reader.invoke(form);
        // 获取属性
        String name = pd.getName();

        System.out.println(name + "=" + value);

    }

    /**
     *
     *  测试表单
     *
     * @author zhangwei_david
     * @version $Id: PropertyDescriptorDemo.java, v 0.1 2015年5月25日 下午8:40:29 zhangwei_david Exp $
     */
    class Form {
        /**属性name**/
        private String name;

        /**
         * Getter method for property <tt>name</tt>.
         *
         * @return property value of name
         */
        public String getName() {
            return name;
        }

        /**
         * Setter method for property <tt>name</tt>.
         *
         * @param name value to be assigned to property name
         */
        public void setName(String name) {
            this.name = name;
        }

    }
}

 

输出的结果是:

TEST
name=TEST

可以发现,正确调用了setter和getter方法,如果将Form中的getter方法删除后运行的结果是什么呢?

Exception in thread "main" java.beans.IntrospectionException: Method not found: setName
	at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:110)
	at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:70)
	at com.cathy.demo.reflect.PropertyDescriptorDemo.main(PropertyDescriptorDemo.java:32)

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 栈和队列讲解_栈和队列的优缺点

    栈和队列讲解_栈和队列的优缺点目录1、栈(1)栈的概念及结构(2)栈的实现2、队列(1)队列的概念及结构(2)队列的实现前言:栈和队列是在顺序表和链表的延伸,如果前面的顺序表和链表你已经掌握了的话,栈和队列对你来说应该就是小菜一碟了。1、栈(1)栈的概念及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(LastInFirstOut)的原则。压栈:栈的插入操作叫做进栈/压栈..

    2025年6月22日
    4
  • 微服务架构-实现技术之具体实现工具与框架8:Spring Cloud Config原理与注意事项

    目录注:主要只做理论性的总结与分析,相关实战代码会在后面的博客中和github中逐步增加。一、配置中心的由来及选择(一)配置中心由来(二)配置中心要求具备的功能(三)配置中心基本流转图和支撑体系分析​(四)多种配置中心的选择与对比方案二、SpringCloudConfig概述及基本实现方法介绍三、SpringClo…

    2022年4月6日
    50
  • vuecli安装_离线安装vuecli

    vuecli安装_离线安装vuecli前言vue-cli是和vue进行深度组合的工具,可以快速帮我们创建vue项目,并且把一些脚手架相关的代码给我们创建好。真正使用vue开发项目,都是用vue-cli来创建项目的。vue-cli介绍

    2022年7月29日
    12
  • 面向过程

    面向过程现在前端技术不是几年前的前端那样,熟练掌握JavaScript、Jquery、Ajax、DOM操作、其他框架等等这些就够了。而随着业务的复杂等多种因素,如今前端有了面向对象的方式编程,如:TypeSc

    2022年8月2日
    5
  • Vue子组件向父组件传值(this.$emit()方法)「建议收藏」

    Vue子组件向父组件传值(this.$emit()方法)「建议收藏」子组件使用this.$emit()向父组件传值首先必须在父组件中引用子组件,然后实现传值 第一步在父组件中引入子组件 使用import引入组件importindexImportOrderfrom’./components/indexImportOrder’声明//定义组件components:{indexImportOrder,…

    2022年10月2日
    2
  • JavaScript高级程序设计(第3版)中文 高清 完整

    JavaScript高级程序设计(第3版)中文 高清 完整下载地址:英文版下载地址:中文版

    2022年8月21日
    5

发表回复

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

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