黑马程序员技术交流社区

标题: 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 编辑

建议你把张老师的视频教程再看一遍吧!最重要的是你要把反射理解清楚。下面是我做的一个小练习
希望对你有帮助
  1. package itcast.reflact;

  2. import itcast.annotationStu.NewAnnotation;
  3. import itcast.annotationStu.TestAnnotation;

  4. import java.beans.IntrospectionException;
  5. import java.beans.PropertyDescriptor;
  6. import java.lang.annotation.Annotation;
  7. import java.lang.reflect.InvocationTargetException;
  8. import java.lang.reflect.Method;

  9. /*
  10. * java内省学习,读取javabean
  11. */
  12. @TestAnnotation(color="green",intAttr={1},atton=@NewAnnotation("新的注解"))
  13. public class InstroSpectorStu {

  14.         /**
  15.          * @param args
  16.          * @throws IntrospectionException
  17.          */
  18.         public static void main(String[] args) throws IntrospectionException {
  19.                 // TODO Auto-generated method stub
  20.                 //声明一个javabean,然后再来读取它的方法的返回值
  21.                 PointReflact pr=new PointReflact(12, 89);
  22.                 //声明一个propertyDescriptor属性描述类
  23.                 String propertyName="x";//声明一个属性
  24.                 //得到x的属性描述类
  25.                 PropertyDescriptor pdget=new PropertyDescriptor(propertyName, pr.getClass());
  26.                 Method read=pdget.getReadMethod();//得到get方法
  27.                 try {
  28.                         System.out.println(read.invoke(pr));//获得pr实体类的“x”属性的值
  29.                 } catch (IllegalArgumentException e) {
  30.                         // TODO Auto-generated catch block
  31.                         e.printStackTrace();
  32.                 } catch (IllegalAccessException e) {
  33.                         // TODO Auto-generated catch block
  34.                         e.printStackTrace();
  35.                 } catch (InvocationTargetException e) {
  36.                         // TODO Auto-generated catch block
  37.                         e.printStackTrace();
  38.                 }
  39.                 //设置“x”的值
  40.                 PropertyDescriptor pdset=new PropertyDescriptor(propertyName, pr.getClass());
  41.                 Method write=pdset.getWriteMethod();//获得这个javabean的propertyName属性的set方法
  42.                 try {
  43.                         write.invoke(pr, 44);//给x属性赋值
  44.                         System.out.println(pr.getX());
  45.                 } catch (IllegalArgumentException e) {
  46.                         // TODO Auto-generated catch block
  47.                         e.printStackTrace();
  48.                 } catch (IllegalAccessException e) {
  49.                         // TODO Auto-generated catch block
  50.                         e.printStackTrace();
  51.                 } catch (InvocationTargetException e) {
  52.                         // TODO Auto-generated catch block
  53.                         e.printStackTrace();
  54.                 }
  55.                         }
  56.        
  57. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2