繁体   English   中英

java.lang.UnsupportedOperationException(无法将arraylist添加到列表中)

[英]java.lang.UnsupportedOperationException(Can't add arraylist to list)

我正在尝试将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)

正如@yassadi在其中一项注释中指出的那样,您的代码中有问题的部分是这一行:

List<SalesOrderItem> itemList = Collections.EMPTY_LIST;

只需将此行更改为

List<SalesOrderItem> itemList = new ArrayList<>();

到此为止。

JavaDocs中所述, Collections.EMPTY_LISTCollections.emptyList()是/返回不可变列表。 那就是您一定不能删除(好吧,这不是一个空列表的问题)或向此列表添加元素。 Collections类提供的这些辅助方法更多地用作默认返回值,如果您只需要关注集合为空的事实,则可以通过分配新实例来避免(内存)开销。

不变特性实际上对Collections类中的一堆方法/成员有效( emptyListsingletonListemptyMapsingletonMap等)。 使用这些辅助方法时,始终需要牢记这一点。

使用Collections的静态成员(例如EMPTY_LISTEMPTY_MAP等)时,您可能会注意到编译器警告

类型安全:List类型的表达式需要未经检查的转换才能符合List

这是由于缺少静态成员的类型推断。 通过使用相应的方法(例如Collections.emptyList() ,将自动推断正确的泛型类型( emptyList只需将其强制转换为所需的类型),您将摆脱此烦人的警告,而无需在代码中添加大量的样板转换。 除非您希望与Java 1.5兼容,否则应该始终优先使用辅助方法而不是成员,但是希望现在这些时间已经结束。

请参见Collections.emptyList()和Collections.EMPTY_LIST有什么区别

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM