内省java_Java中的内省

package com.cn.gbx;

public class Person {

//这里指的是单纯的字段

private String name;

private int age;

//有多少种不同的getter / setter就有多少个属性 这里三个但是还要加上 Object类里面的一个getClass 共四个

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getDetail() {

return name + " : " + age;

}

}

public class DemoTest {

/*

* 通过内省获得bean的所有属性

*/

@Test

public void test1() throws IntrospectionException {

BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);

PropertyDescriptor[] propertyDescriptor = beanInfo.getPropertyDescriptors();

for (PropertyDescriptor p : propertyDescriptor) {

System.out.println(p.getName());

}

}

/*

* 删掉父类的属性

*/

@Test

public void test2() throws IntrospectionException {

BeanInfo beanInfo = Introspector.getBeanInfo(Person.class, Object.class);

PropertyDescriptor[] propertyDescriptor = beanInfo.getPropertyDescriptors();

for (PropertyDescriptor p : propertyDescriptor) {

System.out.println(p.getName());

}

}

/*

* 得到指定属性

*/

@Test

public void test3() throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

Person p = new Person();

PropertyDescriptor descriptor = new PropertyDescriptor("name", Person.class);

Method method = descriptor.getWriteMethod();

method.invoke(p, "gbx");

System.out.println("write " + p.getName());

Method method2 = descriptor.getReadMethod();

System.out.println("read " + method2.invoke(p, null));

System.out.println("获得属性的类型 : " + descriptor.getPropertyType());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值