java.util.AbstractList.add modify list in object处的UnsupportedOperationException
我有以下问题。 我想在创建对象产品后添加其他服务并将其删除-在CartItem类中修改列表additionalServices,但发生了此异常。 我在ShoppingCart类工作,该类包含方法void addExtraService(Product Product,AdditionalService service) 发生此异常: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
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方法。如果没有一个例子,我们就无法报告你的问题