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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 进击的蜗牛 中级黑马   /  2015-7-16 11:01  /  460 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 进击的蜗牛 于 2015-7-16 22:14 编辑

问题     定义一个标准的JavaBean,名叫Person,包含属性name、age。
            使用反射的方式创建一个实例、调用构造函数初始化name、age,使用反射方式调用setName方法对名称进行设置,
             不使用setAge方法直接使用反射方式对age赋值。


代码         //用反射创建实例对象,调用构造函数初始化name,age
                Constructor constructors = Person.class.getConstructor(String.class,int.class);
                Person p = (Person)constructors.newInstance("张三",22);
                System.out.println(p);
               
                //用反射调用setName
                Method methodsetName = Person.class.getMethod("setName",String.class);
                methodsetName.invoke(p, "李四");                           
                 System.out.println(p);       //这个结果为  李四  ,22
                System.out.println(methodsetName.invoke(p, "李四"));//这个为什么结果为null?不一样吗?
               
                //不使用setAge方法直接使用反射方式对age赋值。这个代码怎么写?
               




3 个回复

正序浏览
System.out.println(methodsetName.invoke(p, "李四"));  你是直接打印了methodsetName.invoke方法的返回值,  那么我们看API的时候有这样的一句话“如果方法正常完成,则将该方法返回的值返回给调用者;如果底层方法返回类型为 void,则该调用返回 null。”  , 你的set方法的返回值是void, 当然就是null 了,
回复 使用道具 举报
masai158 发表于 2015-7-16 11:52
Person   肯定没有 setName 方法。 如果私有了方法,请用暴力反射。

反射是对一个对象 里面的方法进行 使 ...

有setName的   前面的代码已经用过了   
也不是私有的问题  试过了
回复 使用道具 举报
本帖最后由 masai158 于 2015-7-16 11:54 编辑

Person   肯定没有 setName 方法。 如果私有了方法,请用暴力反射。

反射是对一个对象 里面的方法进行 使用 或者 强制使用。  反射前 需要确定这个方法 或者 字段是存在的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马