我遇到以下问题。我想在创建对象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;
}
}
取决于additionalServices
的基础类型是您可能无法修改该列表。
例如:List<String> result = Arrays.asList("A", "B");
即使您的结果是列表,也应该清楚该列表无法修改。
由于Java选择了,顺便说一句。一种非常丑陋的方法,即使不是所有继承类都支持该方法,也要在常用接口中声明一些方法(例如List)。
您正在使用java.util.AbstractList
,请尝试使用java.util.List
。