废话不多说,上代码
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. 在SpringMVC中操作Session、Request、Response对象

    示例 @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper user ...

  2. windows下java环境变量标准配置

    配置步骤 1.“此电脑”右键,选择“属性”,点击“高级系统设置”,点击“环境变量”. 2.在“系统变量”这一栏,点击“新建”,变量名:JAVA_HOME,变量值:C:\Program Files\Ja ...

  3. (转)kafka 详解

    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的 ...

  4. ansible 交互提示、tags和block

    1.交互提示:使用关键字:vars_prompt 例:使用ansible的交互式功能创建用户和给定一个密码. --- - hosts: test50 remote_user: root vars_pr ...

  5. GitLab安装及备份迁移数据

    centos7安装GitLab 下载相应版本rpm包 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 我此处下载9.3.6版本. # w ...

  6. ListView / GirdView Adpater的getView方法,首项多次调用

    通过Adapter为AbslistView提供内容是一个常见的做法:在ListView或者GridView的Adapter中的getView()方法中,加入一行日志,看getView()被调用的情况 ...

  7. js type

    js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. new Object() functionundefined ...

  8. yolov1, yolo v2 和yolo v3系列

    目标检测模型主要分为two-stage和one-stage, one-stage的代表主要是yolo系列和ssd.简单记录下学习yolo系列的笔记. 1 yolo V1 yolo v1是2015年的论 ...

  9. poj2456

    Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24979   Accepted: 11594 ...

  10. ES6展开运算符数组合并,函数传参

    定义: .展开运算符允许一个表达式在某处展开. 使用场景 1.展开函数在多个参数的地方使用 .意指用于函数传参 2.多个元素的地方使用,意指用于数组字面量 3.多个边框的地方使用,意指用于解构赋值 函 ...