List 報錯 java.lang.UnsupportedOperationException


廢話不多說,上代碼
public class ArrayListTest {

    @Test
    public void testList() {
        List<Long> longList = new ArrayList<>();
        longList.add(1L);
        longList.add(2L);
        longList.add(3L);
        longList.add(4L);
        longList.forEach(System.out::println);

        System.out.println("----------------------------------");

        List<Long> longList2 = Arrays.asList(1L, 2L, 3L);
        longList2.add(4L);
        longList2.forEach(System.out::println);
    }

}
運行之后,你會看到如下結果

img

瞬間感覺到自己窒息了有么有,是不是不敢相信自己的眼睛啊,趕緊再運行一次,結果還是一樣,就如下。

img

但是,憤怒歸憤怒,還得解決不是,那咱們就來看看吧。
我們知道,longList 是我們自己定義的一個 java.util.ArrayList,我們來看java.util.ArrayList的部分結構

img

會發現它其實重寫了add方法,那我們調用add方法添加元素,是沒有任何毛病的,想怎么玩就怎么玩。
那咱們接下來看看Arrays.asList這貨發生了什么。
我們進入方法看看實現

img

看到它返回了一個ArrayList,是不是感覺也沒什么違和的,然后你就又急了,估計我要是在你面前,你就是這個表情。

img

別着急,別着急,重點來了。

img

來來來,看注釋,為什么說返回的這貨是一個有着list外表的array呢,那我們就進去看看。

img

進來之后你就感覺怪怪的,具體怪在哪兒吧,也說不上來,感覺看着這個包怎么那么欠抽呢。

img

嗷~~~,猛然想了一下,我們經常用到的好像是java.util.ArrayList啊,這貨竟然是java.util.Arrays.ArrayList
這么一想就明白了,為什么作者說這貨就是“披着羊皮的狼外婆”呢,呃呃,不對,是“披着list外皮的array”。
然后我們再看看這貨的結構。
不用找了,我不會給你截圖的,這貨方法還是很多的,截圖有點費勁。但是你肯定找不到add方法。
然后你就“頓悟”了,哦,原來這貨壓根就不讓我添加元素啊。

img

聰明如你,當以后用到這種情況的時候就知道該怎么做了吧。
因為你看到的白羊可能不是真正的白羊,可能只是披了一張白羊皮的狼外婆。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM