使用BeanUtils设置List索引属性

时间:2011-01-27 20:51:46

标签: java javabeans apache-commons-beanutils

我正在尝试使用BeanUtils与类似于以下内容的Java bean进行交互:

public class Bean {
    private List<Integer> prices = new LinkedList<Integer>();

    public List<Integer> getPrices() {
        return prices;
    }
}

根据BeanUtils documentation,BeanUtils支持List s的索引属性:

  

作为JavaBeans规范的扩展,BeanUtils包会考虑其基础数据类型为java.util.List(或List的实现)的任何属性也被编入索引。

但是,假设我尝试执行以下操作:

Bean bean = new Bean();

// Add nulls to make the list the correct size
bean.getPrices().add(null);
bean.getPrices().add(null);

BeanUtils.setProperty(bean, "prices[0]", 123);
PropertyUtils.setProperty(bean, "prices[1]", 456);

System.out.println("prices[0] = " + BeanUtils.getProperty(bean, "prices[0]"));
System.out.println("prices[1] = " + BeanUtils.getProperty(bean, "prices[1]"));

输出结果为:

prices[0] = null
prices[1] = 456

为什么BeanUtils.setProperty()无法设置索引属性,而PropertyUtils.setProperty()可以? BeanUtils不支持List s内的对象的类型转换吗?

1 个答案:

答案 0 :(得分:5)

BeanUtils需要一个setter方法才能工作。您的Bean类缺少prices的setter方法,添加此代码并重新运行代码,它应该可以正常工作: -

public void setPrices(List<Integer> prices) {
    this.prices = prices;
}