Java Reflection // 不能将 java.lang.Boolean 设置为 (boolean)true



我有一个类,它有一个名为"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

传递新布尔值的实例而不是 trueBoolean.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)

最新更新