繁体   English   中英

java.lang.UnsupportedOperationException 与 ArrayList()

[英]java.lang.UnsupportedOperationException with ArrayList()

我有一个像这样的 class

@Getter
public class MyClass  {

    private Collection<String> headers;

    public myConfig(DownloadRequest downloadRequest) {

        this.headers = downloadRequest.getHeaders() == null ? new ArrayList() : downloadRequest.getHeaders();
    }
 }

当我运行它时,它给了我java.lang.UnsupportedOperationException

当我在另一个 function 中使用标头并执行getHeaders().clear()时,我收到此错误。

downloadRequest.getHeaders()的返回类型是Collection<String>

我无法弄清楚我可以将标题投射到什么位置。

I keep getting different Exceptions as I change my code, like UnsupportedOperationException and java.lang.ClassCastException: java.util.Arrays$ArrayList incompatible with java.util.ArrayList , when I change the code to something else, trying out other StackOverflow solutions like this - 为什么在尝试从列表中删除元素时会收到 UnsupportedOperationException? .

我刚刚开始研究 Java,过去一直在研究 python 和 nodejs。

任何帮助表示赞赏。

问题在于, 文档中提到的Collection#clear()是可选操作,并非所有实现都需要支持它。 如果他们不这样做,他们可以抛出UnsupportedOperationException 在您的情况下,从downloadRequest.getHeaders()返回的列表显然是一个不可修改的集合,不支持此操作。

如果是这样,则对其调用clear()将从downloadRequest中删除所有标头。 这就是你想要达到的目标吗? 可能不是。 如果是,那么应该有一个类似downloadRequest.clearHeaders()的方法。

要解决此问题,您可以将不可修改集合中的元素复制到例如ArrayList

new ArrayList<>(downloadRequest.getHeaders())

这会将原始容器中的元素复制到新的可修改ArrayList中,然后您可以随意修改它。


Also note you're java.util.Arrays$ArrayList which is named ArrayList , but it is not java.util.ArrayList . 这是从Arrays.asList(...)返回的不可调整大小的集合,它也不支持clear()

downloadRequest.getHeaders()方法可能返回一个只读集合,因此不支持.clear()

您可以使用ArrayList来包装它并获得可写访问的结构

// private list<String> headers;


Collection<String> headers = downloadRequest.getHeaders();
this.headers = headers  == null ? new ArrayList<>() : new ArrayList<>(headers) ;

我认为您在执行 new ArrayList() 时可能使用了错误的 ArrayList class

From your ClassCastException you are using: java.util.Arrays$ArrayList, which is a nested class of the Arrays class and is immutable.

检查您的导入:您应该使用 java.util.ArrayList。

编辑:没关系这个嵌套的 class 是私有的; 以前的答案可能是正确的,返回的集合必须是不可变的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM