如何从 java.util.List 中删除元素?

发布于 2024-10-03 08:27:06 字数 642 浏览 3 评论 0原文

每次我在 java.util.List 上使用 .remove() 方法时,都会收到错误 UnsupportedOperationException。这让我抓狂。转换为 ArrayList 没有帮助。怎么办呢?

@Entity
@Table(name = "products")
public class Product extends AbstractEntity {

    private List<Image> images;

    public void removeImage(int index) {
         if(images != null) {
            images.remove(index);
         }
    }
}

Stacktrace:

java.lang.UnsupportedOperationException
java.util.AbstractList.remove(AbstractList.java:144)
model.entities.Product.removeImage(Product.java:218)
    ...

我发现我需要使用比 List 接口更精确的类,但是 ORM 示例中的每个地方都使用了 List...

Everytime i use .remove() method on java.util.List i get error UnsupportedOperationException. It makes me crazy. Casting to ArrayList not helps. How to do that ?

@Entity
@Table(name = "products")
public class Product extends AbstractEntity {

    private List<Image> images;

    public void removeImage(int index) {
         if(images != null) {
            images.remove(index);
         }
    }
}

Stacktrace:

java.lang.UnsupportedOperationException
java.util.AbstractList.remove(AbstractList.java:144)
model.entities.Product.removeImage(Product.java:218)
    ...

I see that i need to use more exact class than List interface, but everywehere in ORM examples List is used...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

忆梦 2024-10-10 08:27:06

不幸的是,并非所有列表都允许您删除元素。来自List.remove(int index)的文档:

删除列表中指定位置的元素(可选操作)

除了创建一个与原始列表具有相同元素的新列表,并从这个新列表中删除这些元素之外,您无能为力。像这样:

public void removeImage(int index) {
     if(images != null) {
        try {
            images.remove(index);
        } catch (UnsupportedOperationException uoe) {
            images = new ArrayList<Image>(images);
            images.remove(index);
        }
     }
}

Unfortunately, not all lists allow you to remove elements. From the documentation of List.remove(int index):

Removes the element at the specified position in this list (optional operation).

There is not much you can do about it, except creating a new list with the same elements as the original list, and remove the elements from this new list. Like this:

public void removeImage(int index) {
     if(images != null) {
        try {
            images.remove(index);
        } catch (UnsupportedOperationException uoe) {
            images = new ArrayList<Image>(images);
            images.remove(index);
        }
     }
}
云醉月微眠 2024-10-10 08:27:06

它只是意味着底层 List 实现不支持删除操作。

注意:List 不必是 ArrayList。它可以是任何实现,有时是自定义的。

Its simply means that the underlying List implementation is not supporting remove operation.

NOTE: List doesn't have to be a ArrayList. It can be any implementation and sometimes custom.

最舍不得你 2024-10-10 08:27:06

将列表转换为数组列表不会改变任何事情,对象本身仍然是一个列表,因此您只能使用列表属性,

您应该尝试使用新的 ArrayList 创建它

Casting your list to array list won't change a thing, the object itself stays a List and therefore you only can use the List properties

what you should try is to create it with new ArrayList

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文