黑马程序员技术交流社区
标题:
内省操作javabean的代码问题
[打印本页]
作者:
xscn
时间:
2013-8-23 16:41
标题:
内省操作javabean的代码问题
本帖最后由 xscn 于 2013-8-24 10:30 编辑
用beaninfo批量操作javabean的时候的代码
package cn.itcast.day1;
import java.beans.*;
import java.lang.reflect.*;
public class IntroSpectorDemo2 {
public static void main(String args[])throws Exception {
BeanDemo bd = new BeanDemo();
introSpector(bd);
}
private static void introSpector(Object bd)throws Exception {
BeanInfo bi = Introspector.getBeanInfo(bd.getClass());
PropertyDescriptor[] pd = bi.getPropertyDescriptors();
for (PropertyDescriptor pds : pd) {
String propertName=pds.getName();
Class propertClass=pds.getPropertyType();
Method writeMethod=pds.getWriteMethod();
//if(propertName.equals("name"))
// writeMethod.invoke(bd, "zhangsan");
//else if(propertName.equals("age"))
// writeMethod.invoke(bd, 20);
if(propertClass==String.class)
writeMethod.invoke(bd,"zhangsan1");
else if(propertClass==int.class)//
writeMethod.invoke(bd,21);
Method readMethod = pds.getReadMethod();
Object retval = readMethod.invoke(bd);
System.out.println(retval);
}
}
}
复制代码
打印结果
21
class cn.itcast.day1.BeanDemo
zhangsan1
用PropertyDescriptor匹配属性名和属性类型都有这个class cn.itcast.day1.BeanDemo
问题就是第二行这个东西是怎么来的????????
下面附上Javabean类,帮忙找找原因
package cn.itcast.day1;
public class BeanDemo {
private String n;
private int a;
public BeanDemo() {
super();
}
public String getName() {
return n;
}
public void setName(String name) {
this.n = name;
}
public int getAge() {
return a;
}
public void setAge(int age) {
this.a = age;
}
}
复制代码
作者:
xscn
时间:
2013-8-23 17:32
沙发。自己解决了,原因就是每个类都从上帝那里继承了getClass()方法,对javabean内省时判断到get和set就会扫描到这个方法。
不想打印出来,在循环里添加判断条件就行了
作者:
张俊生
时间:
2013-8-23 17:53
楼主你真快啊
作者:
xscn
时间:
2013-8-23 18:01
张俊生 发表于 2013-8-23 17:53
楼主你真快啊
哈哈,找了半小时的原因,这还快啊
作者:
张俊生
时间:
2013-8-23 18:13
xscn 发表于 2013-8-23 18:01
哈哈,找了半小时的原因,这还快啊
好好学看好你哦
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2