黑马程序员—Introspector内省

--------------------- android培训java培训、期待与您交流! ----------------------

所谓内省,就是用反射的方法获取或设置某个对象的属性,这个对象一定要有get和set方法才可以。这种含get和set方法的类称为又JavaBean。
内省的方法有很多,下面举例说明:
String propertyName = "name";
Student student = new Student("pengyuding",22);
怎样获取student对象的“name”里的属性?(已知Student类含有String name和int age属性,且有相应的set和get方法)

1.用属性名拼凑出get方法,然后用反射获取并调用这个方法
(这里省略,重点介绍下面的方法)

2.用属性描述类PropertyDescriptor获取get方法,然后调用。
PropertyDescriptor pd = new PropertyDescriptor(propertyName, student.getClass());//得到student中“name”属性的PropertyDescriptor。
Method method = pd.getReadMethod();//用属性描述来获取get方法,同理也可以获取set方法。
Object retVal2 =  method.invoke(student);//调用这个方法
System.out.println("第二种方法获取的结果:"+retVal2);


3.用Introspector类的静态方法getBeanInfo获取JavaBean的信息,然后得到该类的属性描述,再用2方法。
BeanInfo beanInfo = Introspector.getBeanInfo(student.getClass());//得到Student类的BeanInfo对象,BeanInfo里面装了把这个类当做JavaBean看的信息。
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();//用BeanInfo对象得到属性描述(PropertyDescriptor)对象的集合(这里只能得到所有的属性描述)
Object retVal2= null;
for(PropertyDescriptor pd : pds)
{
if(pd.getName().equals(propertyName))//遍历这个集合,得到名字为“name”的属性,并按照方法2得到方法并调用。
{
Method method = pd.getReadMethod();
retVal2= method.invoke(student);
break;
}
}
System.out.println("第三种方法获取的结果:"+retVal2);

4.用工具包Beanutils
System.out.println(BeanUtils.getProperty(student, "name"));
BeanUtils.setProperty(student, "age", "9");//这里9用了字符串
System.out.println(student.getAge());
PropertyUtils.setProperty(student, "age", 4);//这里4用原本的类型
System.out.println(student.getAge());
使用这个工具之前必须导入这个工具的jar包。它提供了两个重要的静态工具类BeanUtils和PropertyUtils。
他们都有setProperty方法,区别就是BeanUtils无论接收参数还是返回参数都是用String型的,而PropertyUtils处理的是属性本来的类型。
getProperty也是如此。


----------------------android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值