我正在尝试使用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内的对象的类型转换吗?
答案 0 :(得分:5)
BeanUtils
需要一个setter方法才能工作。您的Bean
类缺少prices
的setter方法,添加此代码并重新运行代码,它应该可以正常工作: -
public void setPrices(List<Integer> prices) {
this.prices = prices;
}