关于java:List-报错-javalangUnsupportedOperationException

32次阅读

共计 1037 个字符,预计需要花费 3 分钟才能阅读完成。

废话不多说,上代码
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);
    }

}
运行之后,你会看到如下后果

霎时感觉到本人窒息了有么有,是不是不敢相信本人的眼睛啊,连忙再运行一次,后果还是一样,就如下。

然而,愤恨归愤恨,还得解决不是,那咱们就来看看吧。
咱们晓得,longList 是咱们本人定义的一个 java.util.ArrayList,咱们来看 java.util.ArrayList 的局部构造

会发现它其实重写了 add 办法,那咱们调用 add 办法增加元素,是没有任何故障的,想怎么玩就怎么玩。
那咱们接下来看看 Arrays.asList 这货产生了什么。
咱们进入办法看看实现

看到它返回了一个ArrayList,是不是感觉也没什么违和的,而后你就又急了,预计我要是在你背后,你就是这个表情。

别着急,别着急,重点来了。

来来来,看正文,为什么说返回的这货是一个有着 list 表面的 array 呢,那咱们就进去看看。

进来之后你就感觉怪怪的,具体怪在哪儿吧,也说不上来,感觉看着这个包怎么那么欠抽呢。

嗷~~~,猛然想了一下,咱们常常用到的如同是 java.util.ArrayList 啊,这货居然是java.util.Arrays.ArrayList
这么一想就明确了,为什么作者说这货就是“披着羊皮的狼外婆”呢,呃呃,不对,是“披着 list 外皮的array”。
而后咱们再看看这货的构造。
不必找了,我不会给你截图的,这货办法还是很多的,截图有点吃力。然而你必定找不到 add 办法。
而后你就“顿悟”了,哦,原来这货压根就不让我增加元素啊。

聪慧如你,当当前用到这种状况的时候就晓得该怎么做了吧。
因为你看到的白羊可能不是真正的白羊,可能只是披了一张白羊皮的狼外婆。

正文完
 0