A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 支胜勇 中级黑马   /  2014-6-2 00:46  /  1194 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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();
                }
        }
}

4 个回复

倒序浏览
第一次看见这个类PropertyDescriptor
回复 使用道具 举报
过来看看。正好我也学到这个位置
回复 使用道具 举报
不错。setUserProperty方法可以用泛型封装的
回复 使用道具 举报
但是当我想传int类型的age时,却传不了,这是为什么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马