黑马程序员技术交流社区
标题:
JavaBean与反射
[打印本页]
作者:
侯伟浩
时间:
2011-11-26 16:29
标题:
JavaBean与反射
本帖最后由 hou3172568 于 2011-11-26 16:47 编辑
看张老师的视频讲的用反射给javabean的属性赋值,自己做的时候又乱了。能不能给我讲一下,或给个详细的例子。谢谢
作者:
冯敏
时间:
2011-11-26 16:34
Person per=new Person();
PropertyDescriptor pd=new PropertyDescriptor("name",Person.class); ////获得该类的属性描述
Method setMethod=pd.getWriteMethod(); //获得用于写入属性值的方法
setMethod.invoke(per, "Jim"); //调用由此 Method 对象表示的底层方法
System.out.println(per.getName());
}
}
class Person
{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
基本思路:先获得类的属性米描述,在获得设置属性值得方法,最后对其属性进行设置
作者:
侯伟浩
时间:
2011-11-26 16:36
哦,多谢啊。我试试....
作者:
颜小飞
时间:
2011-11-26 16:45
本帖最后由 颜小飞 于 2011-11-26 16:46 编辑
建议你把张老师的视频教程再看一遍吧!最重要的是你要把反射理解清楚。下面是我做的一个小练习
希望对你有帮助
package itcast.reflact;
import itcast.annotationStu.NewAnnotation;
import itcast.annotationStu.TestAnnotation;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/*
* java内省学习,读取javabean
*/
@TestAnnotation(color="green",intAttr={1},atton=@NewAnnotation("新的注解"))
public class InstroSpectorStu {
/**
* @param args
* @throws IntrospectionException
*/
public static void main(String[] args) throws IntrospectionException {
// TODO Auto-generated method stub
//声明一个javabean,然后再来读取它的方法的返回值
PointReflact pr=new PointReflact(12, 89);
//声明一个propertyDescriptor属性描述类
String propertyName="x";//声明一个属性
//得到x的属性描述类
PropertyDescriptor pdget=new PropertyDescriptor(propertyName, pr.getClass());
Method read=pdget.getReadMethod();//得到get方法
try {
System.out.println(read.invoke(pr));//获得pr实体类的“x”属性的值
} 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();
}
//设置“x”的值
PropertyDescriptor pdset=new PropertyDescriptor(propertyName, pr.getClass());
Method write=pdset.getWriteMethod();//获得这个javabean的propertyName属性的set方法
try {
write.invoke(pr, 44);//给x属性赋值
System.out.println(pr.getX());
} 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();
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2