黑马程序员技术交流社区
标题: java内省操作困惑?求大神指点! [打印本页]
作者: y510662669 时间: 2012-11-25 18:13
标题: java内省操作困惑?求大神指点!
本帖最后由 y510662669 于 2012-11-26 00:58 编辑
public static void main(String[] args) {
Student s=new Student();
try {
BeanInfo bi=Introspector.getBeanInfo(s.getClass());
PropertyDescriptor pd[]= bi.getPropertyDescriptors();
for(PropertyDescriptor prd:pd){
// System.out.println(prd.getName());//不明白这个地方获取名字,获取的是谁的名字,我查API发现PropertyDescriptor
没有这个这个方法,而且我的打印的是age,请高手指点这个地方到底什么意思?
Method m=prd.getWriteMethod();
if(m.getName().equals("setName")){
m.invoke(s ,"zhangsan");//还有这个反射的invoke到底怎么用来,前两个月学的时候还很明白,现在直接都忘干净了,求高手详细解释?
//
}
}
System.out.println(s.getName());
// System.out.println(s.getAge());
//
} catch (IntrospectionException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
还有我的这个也报异常, java.lang.NullPointerException,空指针异常,就是if那个地方有空指针异常。。求指点。。下面是我的javaben类!
public class Student {
private String name;
private int age;
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;
}
作者: 梁小波 时间: 2012-11-25 18:41
首先我们必须了解内省是做什么的?内省是操作javaBean的,好的这就足够了,那么我们想一下我们怎么去自己来实现?首先得到一个属性!然后操作这个属性,也就是读取和写入!这就够了
来看一下第一句PropertyDescriptor[] pd = bi.getPropertyDescriptors();这得到的是一个属性集合,也就是你的javaBean中有什么属性都打包为PropertyDescriptor对象。由你的javaBean可以看出是String 和name。那么下一句话
for(PropertyDescriptor prd:pd){
System.out.println(prd.getName());
打印的就是String和name的属性名称了!
下面的Method m=prd.getWriteMethod();//通过反射来获得写函数
if(m.getName().equals("setName")){
m.invoke(s ,"zhangsan");//invoke是调用的意思,这里就是调用你获得写函数,参数第一个为操作对象是哪个,第二个是写函数的参数,这里你要修改值,所以为“zhangsan”!
空指针异常我就觉得是你的javaBean有问题,你不妨写一个带参的构造函数!如果没有的话new出来的对象成员均为null的。
其实在写程序是要多想如果是我程序怎么写?这样熟悉程序流程,记忆程序原理。如果一味的记忆步骤,就会陷入老是忘的怪圈!这也是我的一点经验,希望有用!
作者: y510662669 时间: 2012-11-25 19:25
梁小波 发表于 2012-11-25 18:41
首先我们必须了解内省是做什么的?内省是操作javaBean的,好的这就足够了,那么我们想一下我们怎么去自己来 ...
谢谢大神指点!特别是您的经验!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |