黑马程序员技术交流社区

标题: 反射的题,求解疑惑 [打印本页]

作者: 进击的蜗牛    时间: 2015-7-16 11:01
标题: 反射的题,求解疑惑
本帖最后由 进击的蜗牛 于 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赋值。这个代码怎么写?
               





作者: masai158    时间: 2015-7-16 11:52
本帖最后由 masai158 于 2015-7-16 11:54 编辑

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

反射是对一个对象 里面的方法进行 使用 或者 强制使用。  反射前 需要确定这个方法 或者 字段是存在的。

作者: 进击的蜗牛    时间: 2015-7-16 22:15
masai158 发表于 2015-7-16 11:52
Person   肯定没有 setName 方法。 如果私有了方法,请用暴力反射。

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

有setName的   前面的代码已经用过了   
也不是私有的问题  试过了
作者: 453203489    时间: 2015-7-16 22:29
System.out.println(methodsetName.invoke(p, "李四"));  你是直接打印了methodsetName.invoke方法的返回值,  那么我们看API的时候有这样的一句话“如果方法正常完成,则将该方法返回的值返回给调用者;如果底层方法返回类型为 void,则该调用返回 null。”  , 你的set方法的返回值是void, 当然就是null 了,




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