PropertyDescriptor属性描述类学习

PropertyDescriptor属性描述类学习1构造方法通过调用getFoo和setFoo存取方法,为符合标准Java约定的属性构造一个PropertyDescriptor publicPropertyDescriptor(StringpropertyName, Class<?>beanClass) 该构造函数使用简单属性的名称,以及读取和写入属性的方法名称publicPropertyDes…

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

Jetbrains全系列IDE稳定放心使用

1构造方法

通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个PropertyDescriptor  
public PropertyDescriptor(String propertyName,  Class<?> beanClass)  

该构造函数使用简单属性的名称,以及读取和写入属性的方法名称
public PropertyDescriptor(String propertyName, Class<?> beanClass, String readMethodName, String writeMethodName)

此构造函数使用简单属性的名称,以及用于读取和写入属性的Method对象。
public PropertyDescriptor(String propertyName, Method readMethod, Method writeMethod) 

测试

@Test
public void show() throws Exception {
    Class  clazz = UserInfo.class;
    PropertyDescriptor  p = new PropertyDescriptor("name", clazz);
    System.out.println("显示属性描述类:" + p);
}

输出:

显示属性描述类:

java.beans.PropertyDescriptor[

name=name;

propertyType=class java.lang.String;

readMethod=public java.lang.String com.example.feizhou.model.UserInfo.getName();

writeMethod=public void com.example.feizhou.model.UserInfo.setName(java.lang.String)

]

 

2public Method getWriteMethod()

获取属性的setter方法

测试

@Test
public void getWriteMethod() throws Exception {
    Object obj = clazz.newInstance();
    //setter方法给属性赋值
    Method method = pd.getWriteMethod();
    method.invoke(obj, "xiaoming");
    System.out.println(obj.toString());
}

输出

UserInfo{name=’xiaoming’}

3public method getWriteMethod()

获取属性的getter方法

测试

@Test
public void getReadMethod() throws Exception {
    Object obj = clazz.newInstance();
    Field field = clazz.getDeclaredField("name");
    field.setAccessible(true);
    field.set(obj, "xiaoming");
    //getter方法给属性赋值
    Method method = pd.getReadMethod();
    method.invoke(obj);
    System.out.println(obj.toString());
}

输出:

UserInfo{name=’xiaoming’}

4public Class<?> getPropertyType()

获取属性的类型

测试

@Test
public void getPropertyType() throws Exception {
    Class<?> propertyType = pd.getPropertyType();
    System.out.println("propertyType:"+propertyType);

}

输出:

propertyType:class java.lang.String

5public void setReadMethod(Method readMethod)

设置用于读取属性值的方法

测试

@Test
public void setReadMethod() throws Exception {

    Object obj = clazz.newInstance();
    Method getName2=clazz.getDeclaredMethod("getName2");
    //设置读属性的方法
    pd.setReadMethod(getName2);
    //获取读属性的方法
    Method method = pd.getReadMethod();
    Object invoke = method.invoke(obj);
    System.out.println(invoke.toString());
}

输出:getName2

6public void setWriteMethod(Method writeMethod)

设置用于写入属性值的方法

测试

@Test
public void setWriteMethod() throws Exception {
    Object obj = clazz.newInstance();
    Method setName2=clazz.getDeclaredMethod("setName2",String.class);
    //设置写属性的方法
     pd.setWriteMethod(setName2);
    //获取写属性的方法
    Method method = pd.getWriteMethod();
     method.invoke(obj,"1111");
    System.out.println(obj);
}

输出:

UserInfo{name=’1111′}

 

测试的数据

package com.example.feizhou.ex;


import com.example.feizhou.model.UserInfo;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import java.beans.PropertyDescriptor;
import java.beans.PropertyEditor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author hui
 * @description
 * @create 2018/8/30 上午11:29
 */
public class PropertyDescriptorTest {
    private Class clazz;
    private PropertyDescriptor pd;

    @BeforeTest
    public void init() throws Exception {

        this.clazz = UserInfo.class;
        this.pd = new PropertyDescriptor("name", clazz);
    }

    @Test
    public void show() throws Exception {
        Class  clazz = UserInfo.class;
        PropertyDescriptor  p = new PropertyDescriptor("name", clazz);
        System.out.println("显示属性描述类:" + p);
    }

    @Test
    public void getWriteMethod() throws Exception {
        Object obj = clazz.newInstance();
        //setter方法给属性赋值
        Method method = pd.getWriteMethod();
        method.invoke(obj, "xiaoming");
        System.out.println(obj.toString());
    }

    @Test
    public void getReadMethod() throws Exception {
        Object obj = clazz.newInstance();
        Field field = clazz.getDeclaredField("name");
        field.setAccessible(true);
        field.set(obj, "xiaoming");
        //setter方法给属性赋值
        Method method = pd.getReadMethod();
        method.invoke(obj);
        System.out.println(obj.toString());
    }


@Test
public void getPropertyType() throws Exception {
    Class<?> propertyType = pd.getPropertyType();
    System.out.println("propertyType:"+propertyType);

}


    @Test
    public void setReadMethod() throws Exception {

        Object obj = clazz.newInstance();
        Method getName2=clazz.getDeclaredMethod("getName2");
        //设置读属性的方法
        pd.setReadMethod(getName2);
        //获取读属性的方法
        Method method = pd.getReadMethod();
        Object invoke = method.invoke(obj);
        System.out.println(invoke.toString());
    }
    @Test
    public void setWriteMethod() throws Exception {
        Object obj = clazz.newInstance();
        Method setName2=clazz.getDeclaredMethod("setName2",String.class);
        //设置写属性的方法
         pd.setWriteMethod(setName2);
        //获取写属性的方法
        Method method = pd.getWriteMethod();
         method.invoke(obj,"1111");
        System.out.println(obj);
    }
}


---------------------------------------
public class UserInfo {

    private  String name;


    public String getName() {
        return name;
    }
    public String getName2() {
        return "getName2";
    }

    public void setName(String name) {
        this.name = name;
    }
    public void setName2(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "name='" + name + '\'' +
                '}';
    }
}

 

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

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

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


相关推荐

  • Java继承

    Java继承一:继承的概述1.继承的定义继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。–注:父类又称为超类或者基类。子类又称为派生类!2.继承的格式通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:class父类{…}class子类extends父类{…}二、关于继承之后的成员变量1.当成员变量不重名如果子类父类中出现不重名的成员变量,这时的访问是没有影

    2022年7月7日
  • java 卸载工具_java卸载工具下载

    java 卸载工具_java卸载工具下载java怎样完全卸载?怎么彻底删除java?有些用户的系统上会自带java程序,或者是因为安装了什么软件导致java一起安装了,那这个时候怎么将java卸载呢?不清楚的用户,看看小米小编为大家推荐的一款非常好用的java卸载工具。软件介绍java卸载器是一款java完全卸载工具,当你的java出现了故障需要卸载重装的话,就可以使用这个软件完全卸载掉java的所有文件,可以完美解决java卸载不了、…

    2022年5月20日
  • ARM Linux ELF加壳方案

    ARM Linux ELF加壳方案随着移动应用和IoT设备的普及,大量的硬件抛弃了传统的x86架构,选择使用能耗低、性价比高的ARM芯片,ARM指令级渐渐成为主流,但随之而来的,是愈发严峻的安全问题。早期的加壳产品主要利用压缩加密技术对文件进行整体性保护,但随着逆向技术的提升,整体性的文件保护方案已经被攻克,于是加壳产品引入虚拟机概念,可以实现函数级的代码控制流保护,加密的颗粒度更加细致,激活成功教程难度呈几何级增加。压缩加密技术原理类似桌面应用的「压缩壳」,将SO文件中的代码段压缩或加密,在入口函数中解密再执行。这种保护方式可

    2022年10月11日
  • 批处理、VBS实现自动设置IP、默认网关、DNS、WINS、IE代理!(二)

    批处理、VBS实现自动设置IP、默认网关、DNS、WINS、IE代理!(二)四、自动设置IE代理美国IE代理.bat@echoofftitle自动设置代理服务器echo自动设置代理服务器remecho正在清空代理服务器设置……remregadd”HKCU\Software\Microsoft\Windows\CurrentVersion\InternetSettings”/vProxyEnable/tREG_DWOR…

    2022年6月21日
  • 高效沟通的秘诀_请你说说对沟通视窗的理解

    高效沟通的秘诀_请你说说对沟通视窗的理解最近听了樊登老师在混沌讲领导力,其中印象最深刻的就是沟通视窗。后来我发现把它用在沟通方面会更有效。我们常常困惑于如何与他人沟通,也会因彼此不能深入了解而大伤脑筋。今天我就介绍一个好用的思维模型,它涵盖

    2022年8月3日
  • PHP 导出网页表格如何对标签中的内容设置属性

    PHP 导出网页表格如何对标签中的内容设置属性

    2022年3月2日

发表回复

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

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