簡體   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