我有一个类,它有一个名为"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
传递新布尔值的实例而不是 true、Boolean.TRUE 或新布尔值(true(.booleanValue(( 也不起作用。有趣的是,如果我将java.lang.Boolean的类型更改为布尔值,它可以完美地工作。但是,我也需要能够处理java.lang.Boolean。
如何通过反射设置 java.lang.Boolean?
使用
field.set(myClass, Boolean.TRUE);
将字段设置为布尔值。
setBoolean
方法仅在变量是原始类型boolean
时才有效bool
。
假设bool
变量的类型是 java.lang.Boolean
- 正如注释中@shmosel建议的那样 - 您应该简单地使用set
方法,true
值将自动装箱到Boolean
中。
field.set(myClass, true)