关于Java反射赋值问题

发布于 2021-12-01 12:47:26 字数 638 浏览 925 评论 7

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

牵你的手,一向走下去 2021-12-01 19:06:12

IllegalArgumentException- 如果指定对象不是声明基础字段(或者其子类或实现者)的类或接口的实例,或者解包转换失败。

应该是拆箱失败了

英雄似剑 2021-12-01 19:01:09

@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.

臻嫒无言 2021-12-01 18:26:30

Field只有Set方法,没有setValue方法,知道这个可以,只是想问,为什么会出现这个异常

夜无邪 2021-12-01 17:31:50
//field.setBoolean(person, true);
field.setValue(person,true);

终陌 2021-12-01 17:14:39

并不是

彩扇题诗 2021-12-01 15:38:22

回复
改成这样可以 private boolean isChild

皇甫轩 2021-12-01 14:47:49

是否反射不能自动wrap为对象?

你赋值一个new Boolean(true)过去试试呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文