我有一个类,它有一个名为“bool”的字段,类型为 java.lang.Boolean ,并尝试使用以下代码通过反射设置其值:
MyClass myClass = new MyClass();
try {
Field field = myClass.getClass().getField("bool");
field.setBoolean(myClass, true);
} catch (Throwable ex) {
ex.printStackTrace();
}
我总是收到以下错误: java.lang.IllegalArgumentException:无法将java.lang.Boolean字段MyClass.bool设置为(boolean)true
传递 new Boolean 的实例而不是 true , Boolean.TRUE 或 new Boolean(true).booleanValue( )也没有用。 有趣的是,如果我将 java.lang.Boolean 的类型更改为 boolean ,它可以完美地工作。但是,我也需要能够处理java.lang.Boolean。
如何通过反射设置java.lang.Boolean?
答案 0 :(得分:2)
使用
field.set(myClass, Boolean.TRUE);
将字段设置为布尔值。
答案 1 :(得分:1)
setBoolean
变量属于基本类型bool
时, boolean
方法才有效。
将bool
变量设为java.lang.Boolean
类型 - 与评论中建议的@shmosel一样 - 您应该只使用set
方法,true
值将被自动添加到Boolean
。
field.set(myClass, true)