黑马程序员技术交流社区
标题:
反射的题,求解疑惑
[打印本页]
作者:
进击的蜗牛
时间:
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