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

问题描述 投票:1回答:1

我正在尝试将ArrayList添加到ListgetSalesOrderitm()是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类中的hibernate映射

@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类中的hibernate映射

@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)
java arraylist
1个回答
5
投票

正如@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之前的兼容性,但是现在这些时间有望结束。

What is the difference between Collections.emptyList() and Collections.EMPTY_LIST

© www.soinside.com 2019 - 2024. All rights reserved.