【发布时间】:2020-04-12 16:18:39
【问题描述】:
我遇到了以下问题。 我想在创建对象 Product 后添加其他服务并将其删除 - 修改 CartItem 类的 List additionalServices,但发生了此异常。 我在 ShoppingCart 类工作,其中包含方法 void addExtraService(Product product, AdditionalService service) 。
发生了这个异常:
java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
我不知道如何解决这个问题。
到目前为止我所写的:
void addExtraService(Product product, AdditionalService service) {
List<AdditionalService> newAdditionalServices;
for (CartItem i : items) {
if (i.getProduct().equals(product)) {
newAdditionalServices= i.getProduct().getServices();
newAdditionalServices.add(new AdditionalService(service.getName(), service.getPrice()));
i.setAdditionalServices(newAdditionalServices);
}
}
}
void removeExtraService(Product product, AdditionalService service) throws Exception {
List<AdditionalService> newAdditionalServices;
for(CartItem i:items){
if(i.getProduct().equals(product)){
newAdditionalServices= i.getProduct().getServices();
newAdditionalServices.remove(service);
i.setAdditionalServices(newAdditionalServices);
}
else{
throw new Exception("Product doesn't exist");
}
}
}
类的样子:
public class Product {
private final String productId;
private final int price;
private final List<AdditionalService> services;
private final Duration expectedSendingTime;
public Product(String productId, int price, List<AdditionalService>
services, Duration expectedSendingTime) {
this.productId = productId;
this.price = price;
this.services = services;
this.expectedSendingTime = expectedSendingTime;
}
public String getProductId() {
return productId;
}
public int getPrice() {
return price;
}
public List<AdditionalService> getServices() {
return services;
}
public Duration getExpectedSendingTime() {
return expectedSendingTime;
}
}
public class CartItem {
Product product;
List<AdditionalService> additionalServices;
int quantity;
int price;
public CartItem(Product product, List<AdditionalService> additionalServices, int quantity, int price) {
this.product = product;
this.additionalServices = additionalServices;
this.quantity = quantity;
this.price = price;
}
public Product getProduct() {
return product;
}
public List<AdditionalService> getAdditionalServices() {
return additionalServices;
}
public void setAdditionalServices(List<AdditionalService> additionalServices) {
this.additionalServices = additionalServices;
}
public int getQuantity() {
return quantity;
}
public int getPrice() {
return price;
}
}
【问题讨论】:
-
显示这个
List<AdditionalService> services列表是如何被实例化的? -
还没有,我不知道在我的 CartItem 类中分配它是否正确,但是我尝试在 Carditem 中分配它,这是同样的问题
-
这条语句返回的
i.getProduct().getServices();是不可变列表,这意味着您不能通过查看上面帖子中的代码和错误消息来通过添加或删除项目来修改该列表,我只能说这个声明@Alice -
@Alice,请不要在评论中插入您的代码,另外,示例中的代码不完整,示例如果您在产品上调用equal,您应该添加equal方法产品内部。如果没有示例,我们无法重现您的问题
标签: java