5

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

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

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

根据BeanUtils 文档,BeanUtils 确实支持以下索引属性List

作为对 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不支持Lists内部对象的类型转换吗?

4

1 回答 1

5

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

public void setPrices(List<Integer> prices) {
    this.prices = prices;
}
于 2011-01-28T02:33:41.073 回答