java - BeanUtils.setProperty 不适用于 boolean 值?

标签 java apache-commons-beanutils

我有这个简单的 Bean 类并尝试使用 BeanUtils.setProperty 设置一些值 问题是,似乎 String 工作得很好,但是当我尝试设置一个 boolean 值时它就不起作用了。我已经尝试将该字段定义为公共(public)字段,但仍然无法正常工作。有什么帮助吗?为什么这不起作用?

public class TestBean {

protected Boolean someBoolean;
protected String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public boolean isSomeBoolean() {
    if (someBoolean == null) {
        return true;
    } else {
        return someBoolean;
    }
}

public void setSomeBoolean(Boolean value) {
    this.someBoolean = value;
}

public static void main(String[] args) {
    TestBean o = new TestBean();
    Boolean b = new Boolean(false);
    BeanUtils.setProperty(o, "someBoolean", b);
    BeanUtils.setProperty(o, "name", "A name");
    System.out.println(((TestBean)o).isSomeBoolean());
    // Output = true WHY?????
    System.out.println(((TestBean)o).getName());
    // Output = A name 

    BeanUtils.setProperty(o, "someBoolean", false);
    BeanUtils.setProperty(o, "name", "Another name");

    System.out.println(((TestBean)o).isSomeBoolean());
    // Output = true WHY????
    System.out.println(((TestBean)o).getName());
    // Output = Another name        

}

最佳答案

你需要改变它

protected Boolean someBoolean;

protected boolean someBoolean;

您将从这里获得更多信息。

Java Beans, BeanUtils, and the Boolean wrapper class

关于java - BeanUtils.setProperty 不适用于 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11332820/

相关文章:

java.util.date/日历/SimpleDateFormat : Adding/Incrementing the months in java

java - BeanUtils copyProperties API 忽略 null 和特定属性

swing - 如何在运行时选择jre?

java - 指定部署环境

java - 如何测量单向延迟?

java - 为数字和单词设置unicode的正则表达式

java - BeanUtils.copyProperties(subclass,superclass) 对于子类字段值返回 null

java - 复制整个Object,java中没有实现clone?

java - BeanUtils 中转换器的注册是线程本地的吗?

java - Apache BeanUtils 能否用于从列表中删除项目而不是将它们设置为空?