java.util.AbstractList.add modify list in object处的UnsupportedOperationException

java.util.AbstractList.add modify list in object处的UnsupportedOperationException,java,Java,我有以下问题。 我想在创建对象产品后添加其他服务并将其删除-在CartItem类中修改列表additionalServices,但发生了此异常。 我在ShoppingCart类工作,该类包含方法void addExtraService(Product Product,AdditionalService service) 发生此异常: java.lang.UnsupportedOperationException at java.util.AbstractList.add(Abstrac

我有以下问题。 我想在创建对象产品后添加其他服务并将其删除-在CartItem类中修改列表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");
        }
    }
}
void addExtraService(产品产品,附加服务){
列出新的附加服务;
用于(项目一:项目){
如果(i.getProduct().equals(product)){
newAdditionalServices=i.getProduct().getServices();
newAdditionalServices.add(newAdditionalService(service.getName(),service.getPrice());
i、 设置附加服务(新附加服务);
}
}
}
void removeExtraService(产品、附加服务)引发异常{
列出新的附加服务;
用于(项目一:项目){
如果(i.getProduct().equals(product)){
newAdditionalServices=i.getProduct().getServices();
新建附加服务。删除(服务);
i、 设置附加服务(新附加服务);
}
否则{
抛出新异常(“产品不存在”);
}
}
}
类的外观:

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;
        }
}
公共类产品{
私有最终字符串productId;
私人最终int价格;
私人最终名单服务;
预期发送时间的私人最终持续时间;
公共产品(字符串productId、int price、List)
服务,预期持续时间(发送时间){
this.productId=productId;
这个价格=价格;
这是服务=服务;
this.expectedSendingTime=expectedSendingTime;
}
公共字符串getProductId(){
返回productId;
}
public int getPrice(){
退货价格;
}
公共列表服务(){
返回服务;
}
公共持续时间getExpectedSendingTime(){
返回预期发送时间;
}
}
公共类商品{
产品;
列出额外服务;
整数;
国际价格;
公共CartItem(产品、列表附加服务、整数数量、整数价格){
本产品=产品;
this.additionalServices=additionalServices;
这个。数量=数量;
这个价格=价格;
}
公共产品{
退货产品;
}
公共列表getAdditionalServices(){
返回额外服务;
}
public void setAdditionalServices(列出additionalServices){
this.additionalServices=additionalServices;
}
公共整数getQuantity(){
退货数量;
}
public int getPrice(){
退货价格;
}
}

取决于
附加服务的基础类型
您可能无法修改列表

例如:
List result=Arrays.asList(“A”、“B”)
即使你的结果是一个列表,也应该清楚这个列表不能被修改


由于Java选择了,顺便说一句,一种非常丑陋的方式,在常用接口(例如List)中声明一些方法,即使不是所有继承类都支持该方法。

展示了这个
列表服务
列表是如何实例化的?我还不知道在我的CartItem类中分配它是否正确,B但我试图在Carditem中分配它,问题与此语句返回的
I.getProduct().getServices()相同
是不可变列表,这意味着您不能通过添加或删除列表中的项目来修改该列表,通过查看上面帖子中的代码和错误消息,我只能说@AliceDoes这句话回答了您的问题@Alice,请不要在注释中插入代码,另外,示例中的代码不完整,示例如果在产品上调用equal,则应在产品中添加equal方法。如果没有一个例子,我们就无法报告你的问题