废话不多说,上代码
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方法。
然后你就“顿悟”了,哦,原来这货压根就不让我添加元素啊。

聪明如你,当以后用到这种情况的时候就知道该怎么做了吧。
因为你看到的白羊可能不是真正的白羊,可能只是披了一张白羊皮的狼外婆。

List 报错 java.lang.UnsupportedOperationException的更多相关文章

  1. Arrays.asList()报错java.lang.UnsupportedOperationException

    问题: 使用工具类Arrays.asList()方法把数组转换成集合时,不能使用修改集合相关的方法,比如add,remove.这个ArrayList是Arrays类自己定义的一个内部类!这个内部类没有 ...

  2. eclipse启动报错java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' befo

    报错: java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invo ...

  3. 开着idea,死机了,关机重启。重启之后,重新打开idea报错java.lang.AssertionError:upexpected content storage modification

    开着idea,死机了,关机重启.重启之后,重新打开idea报错java.lang.AssertionError:upexpected content storage modification. goo ...

  4. maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    主要原因是maven项目里面的jar包吗,没有导入到项目中 maven web 项目中启动报错 Java.lang.ClassNotFoundException: org.springframewor ...

  5. 【原创】大叔问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT

    最近用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: Us ...

  6. 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"

    在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...

  7. 项目报错java.lang.ClassNotFoundException: org.common.SessionListener

    现象:项目报错java.lang.ClassNotFoundException: org.common.SessionListener,并且myeclipse左侧Package Explorer中项目 ...

  8. java含有静态代码块新建的时候报错java.lang.ExceptionInInitializerError

    问题描述 最近在写一些单元测试用例,为了避免连接外界服务,所有选择mock了数据库Dao层,计划将数据库所需要的数据存在List中,在类加载的时候初始化List并且填充数据.代码如下: public ...

  9. Spring boot Unable to start embedded Tomcat报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()

    Spring boot Unable to start embedded Tomcat 报错 java.lang.NoSuchMethodError: javax.servlet.ServletCon ...

随机推荐

  1. 在vultr中安装k8s测试

    vultr 安装k8s *** 如果国内访问 k8s.gcr.io 很慢,或者无法访问 *** 在应用yaml文件创建资源时,将文件中镜像地址进行内容替换即可: 将k8s.gcr.io替换为 regi ...

  2. 微信小程序入门与实战 从0到1进行细致讲解 涵盖小程序开发核心技能下载

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

  3. jenkins之docker安装(jenkins/jenkins:lts)

    建议使用此镜像安装,不要使用官网推荐的jenkinsci/blueocean镜像,使用它构建node程序会出现问题. 1.宿主服务器jenkins_home目录权限 为了方便安装插件,升级,迁移,因此 ...

  4. 2.线程--线程安全(synchronized)

    同步锁:synchronized,(缺点:不能手动开锁 解锁)   1.同步代码块 public void run(){ synchronized(this){/使用this关键字表示同一把锁,非静态 ...

  5. NOIP1999提高组 题解报告

    T1 导弹拦截 题目大意:依次有\(n\) (\(n \le 10^5\))枚导弹,一套导弹拦截系统只能拦截一系列高度递减的导弹(一套系统拦截的弹道不一定相邻).求一套系统最多能拦截多少导弹,以及最少 ...

  6. checkbox后台传个list显示和回显的页面代码C标签

        <c:forEach items="${listtest}" var="provinces">        <input type= ...

  7. vue-qr生成下载二维码

    安装vue-qr npm install vue-qr --save 生成二维码实列 <vue-qr ref="Qrcode" :text="qrCodeConfi ...

  8. php手记之01-tp5框架安装

    1.1.介绍 在web领域,PHP是所有编程语言中比较受欢迎的一门语言! PHP已经诞生出几十种编程框架!但国内最热门和使用率最好的框架有Thinkphp和Laravel这两款PHP框架! 1.2.为 ...

  9. LINUX增加SWAP分区---install_oracle

    我们都知道在安装Linux系统时在分区时可以分配swap分区,而系统安装后(在运行中)如何建立或调整swap分区呢?在装完Linux系统之后,建立Swap分区有两种方法.1.新建磁盘分区作为swap分 ...

  10. [IMX6DL] CPU频率调节模式以及降频方法

    本文转自http://blog.csdn.net/kris_fei/article/details/51822435 Kernel branch: 3.0.35 CPU的频率调节模式:1. Perfo ...