黑马程序员技术交流社区

标题: 内省操作 [打印本页]

作者: 支胜勇    时间: 2014-6-2 00:46
标题: 内省操作
package com.ItHeima.WeekAct;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;


/**
* 第一题:内省操作,创建一个user实体,该对象包含name和age属性。通过内省给user对象设置name和age的值。
* @author 支胜勇
*
*/
public class Test1 {
       
        public static class User{
               
                private String name;//字段
                private String age;
               
                public String getName() {//读选择器
                        return name;
                }
                public void setName(String name) {
                        this.name = name;
                }
               
               
                public String getAge() {
                        return age;
                }
                public void setAge(String age) {//写选择器
                        this.age = age;
                }
               
               
                public User(){
                        super();
                }
        }
       
       
       
       
        /***
         * 利用内省机制为User类中的name和age属性赋值,但在调用Mothod.invoke(Objec,Object[])时,第二个参数有问题,所以age设置为String
         * @param name
         * @param age
         * @throws Exception
         */
        public static  void setUserProperty(String name,String age) throws Exception{
               
                User myUser=new User();
               
                //1.通过构造器来创建PropertyDescriptor对象
                PropertyDescriptor propDesc=new PropertyDescriptor("name",User.class);
               
                //2.通过该对象来获得写方法
                Method method=propDesc.getWriteMethod();
               
                Object nameArr[]=new Object[]{name};
               
                //3.执行写方法
                method.invoke(myUser,nameArr);
               
                //重复以上操作获取设置age字段
                propDesc=new PropertyDescriptor("age",User.class);
                method=propDesc.getWriteMethod();
               
                Object ageArr[]=new Object[]{age};
               
                method.invoke(myUser, ageArr);
                //4.输出对象字段的值
                System.out.print("我叫"+myUser.getName()+";今年"+myUser.getAge()+"岁了!");
        }
       
       
        public static void main(String args[]) {
               
                try {
                        setUserProperty("支胜勇","26");
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}

作者: yuZhe_toString    时间: 2014-6-2 19:38
第一次看见这个类PropertyDescriptor
作者: hengxing0079    时间: 2014-6-2 21:03
过来看看。正好我也学到这个位置
作者: KevinSmart    时间: 2014-6-2 21:09
不错。setUserProperty方法可以用泛型封装的
作者: 支胜勇    时间: 2014-6-3 12:10
但是当我想传int类型的age时,却传不了,这是为什么?




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