关于Java反射赋值问题
public class MyReflectTest { @Test public void test() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ Person person = new Person(); Field field = person.getClass().getDeclaredField("isChild"); field.setAccessible(true); field.setBoolean(person, true); } } class Person{ private Boolean isChild;}
为什么不能用setBoolean给isChild赋值呢?
报java.lang.IllegalArgumentException: Can not set java.lang.Boolean field org.kang.reflect.Person.isChild to (boolean)true
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
IllegalArgumentException- 如果指定对象不是声明基础字段(或者其子类或实现者)的类或接口的实例,或者解包转换失败。
应该是拆箱失败了
@exception IllegalArgumentException if the specified object is not an
* instance of the class or interface declaring the underlying
* field (or a subclass or implementor thereof),
* or if an unwrapping conversion fails.
Field只有Set方法,没有setValue方法,知道这个可以,只是想问,为什么会出现这个异常
并不是
回复
改成这样可以 private boolean isChild
是否反射不能自动wrap为对象?
你赋值一个new Boolean(true)过去试试呢?