Java Reflection //无法将java.lang.Boolean设置为(boolean)true

时间:2017-03-20 23:09:54

标签: java reflection

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

2 个答案:

答案 0 :(得分:2)

使用

field.set(myClass, Boolean.TRUE);

将字段设置为布尔值。

答案 1 :(得分:1)

仅当setBoolean变量属于基本类型bool时,

boolean方法才有效。

bool变量设为java.lang.Boolean类型 - 与评论中建议的@shmosel一样 - 您应该只使用set方法,true值将被自动添加到Boolean

field.set(myClass, true)