我正在尝试将ArrayList
添加到List
。 getSalesOrderitm()
是Salesorder项目列表。
Criteria cr = session.createCriteria(SalesOrder.class);
cr.add(Restrictions.ge("date", new SimpleDateFormat("yyyy/MM/dd").parse(fdate)));
cr.add(Restrictions.le("date", new SimpleDateFormat("yyyy/MM/dd").parse(tdate)));
List<SalesOrder> orderList = cr.list();
List<SalesOrderItem> itemList = Collections.EMPTY_LIST;
double totalAmount = 0.00;
for (SalesOrder salesOrder : orderList) {
itemList.addAll(salesOrder.getSalesorderyitm());
}
下面您可以在Salesorder类中看到休眠映射
@OneToMany(targetEntity=SalesOrderItem.class,mappedBy="salesorder",fetch=FetchType.LAZY)
public List<SalesOrderItem> getSalesorderyitm() {
return salesorderyitm;
}
public void setSalesorderyitm(List<SalesOrderItem> salesorderyitm) {
this.salesorderyitm = salesorderyitm;
}
下面您可以在salesOrderItem类中看到休眠映射
@ManyToOne
@JoinColumn(name="SOI_SalesOrderId")
public SalesOrder getSalesorder() {
return salesorder;
}
public void setSalesorder(SalesOrder salesorder) {
this.salesorder = salesorder;
}
我遇到了以下错误
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at java.util.AbstractCollection.addAll(AbstractCollection.java:342)
答案 0 :(得分:6)
正如@yassadi在评论中指出的那样,您的代码有问题的部分是这一行:
List<SalesOrderItem> itemList = Collections.EMPTY_LIST;
只需将此行更改为
List<SalesOrderItem> itemList = new ArrayList<>();
您已经完成。
如JavaDocs Collections.EMPTY_LIST
和Collections.emptyList()
中所述,返回不可变列表。那就是您一定不能删除(好吧,这不是一个空列表的问题)或向此列表添加元素。由Collections
类提供的这些辅助方法更多地用作默认返回值,如果您只需要关注集合为空的事实,就可以通过分配新实例来避免(内存)开销。 >
不可变特性实际上对Collections
类(emptyList
,singletonList
,emptyMap
,singletonMap
,...中的一堆方法/成员有效。 ..)。使用这些辅助方法时,始终需要牢记这一点。
使用Collections
的静态成员,例如EMPTY_LIST
,EMPTY_MAP
等时,您可能会注意到编译器警告
类型安全:List类型的表达式需要未经检查的转换才能符合List
这是由于缺少静态成员的类型推断。通过使用诸如Collections.emptyList()
之类的相应方法,将自动推断出正确的泛型类型(emptyList
只需将其强制转换为所需的类型),您将摆脱此烦人的警告,而无需在您的代码中添加大量的样板转换码。除非您希望与Java 1.5兼容,否则应该总是优先使用辅助方法而不是成员,但是希望现在已经结束了。
请参见What is the difference between Collections.emptyList() and Collections.EMPTY_LIST