Arrays.asList踩坑——引发的Exception in thread “main“ java.lang.UnsupportedOperationException

Exception in thread “main” java.lang.UnsupportedOperationException

如果你尝试修改Arrays.asList方法生产的List,那么就会报这个错误

public static void main(String[] args) {Integer[] arr = new Integer[]{7,8,9};List<Integer> list = Arrays.asList(arr);list.add(4);
}

Exception in thread “main” java.lang.UnsupportedOperationException
  at java.util.AbstractList.add(AbstractList.java:148)
  at java.util.AbstractList.add(AbstractList.java:108)

看一下asList方法

/*** 返回一个固定长度的ArrayList* @param a* @param <T>* @return*/
public static <T> List<T> asList(T... a) {return new Arrays.ArrayList<>(a);
}

而这里返回的ArrayList,是Arrays工具类内部的一个私有内部类

private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable
{private static final long serialVersionUID = -2764017481108945198L;// 这里的数组是一个final的,说明这个数组结构不会发生改变,也就是定长数组private final E[] a;ArrayList(E[] array) {a = Objects.requireNonNull(array);}......

img

这个类继承了AbstractList抽象类,只实现了get/set方法,但是没有实现add/remove方法。而AbstractList里面的add/remove方法的默认逻辑是:

// add
public boolean add(E e) {add(size(), e);return true;
}
public void add(int index, E element) {throw new UnsupportedOperationException();
}// remove
public E remove(int index) {throw new UnsupportedOperationException();
}

所以 Arrays.asList(arr) 返回的List是无法增删的,但是可以读取和修改。

public static void main(String[] args) {Integer[] arr = new Integer[]{7,8,9};List<Integer> list = Arrays.asList(arr);// list.add(4);// 可以调用List的方法list.set(0, 1);// 也可以直接修改原数组arr[1] = 2;arr[2] = 3;list.forEach(System.out::println);
}

输出:

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GIS算法:JAVA拓扑套件JTS

常用可以用于GIS数据处理和空间计算的java包有geotool和jts。 相对来说&#xff0c;geotool功能更全面&#xff0c;还可以用于数据转换、瓦片地图发布、栅格影像分析等&#xff0c;jts只能进行基本的数据处理和空间计算。 但大多数情况下jts就完全够用了。 geotool的官网&am…

Java本地远程服务器debug调试详解

日常我们debug是经常用的&#xff0c;但是本地还好说&#xff0c;远程debug就有点难度&#xff0c;而且有时候必须要在预演&#xff0c;测试环境的服务器去debug&#xff0c;举个例子&#xff0c;需要https&#xff0c;公网&#xff0c;域名之类的&#xff0c;测试服务器这些有…

Linux “ll“ 命令详解

“ls -l” “ls -al” ll 用来查询当前目录下文件及目录的详情 1.第一位文件类型 普通文件 &#xff0c; d 目录文件&#xff0c;I 链接文件&#xff0c;p 管理文件&#xff0c; b 块设备文件&#xff0c; c 字符设备文件&#xff0c; s 套接字文件 2.文件属性 第一部分表示文…

SpringBoot项目jar发布获取jar包所在目录路径

//第一种File path new File(ResourceUtils.getURL("classpath:").getPath());if(!path.exists()) path new File("");System.out.println(path.getAbsolutePath());//第二种System.out.println(System.getProperty("user.dir"));//第三种Stri…

路径classpath,classpath*,以及file:

./ 当前目录 …/上一层目录 /是根目录 1. classpath : 类路径&#xff0c;指的是编译后的字节码文件存储路径&#xff0c;一般为target目录下的classes目录&#xff08;java项目&#xff09;&#xff0c;在web项目中指的是WEB-INF下的classes目录。实际上&#xff0c;两者其实…

到底什么时候该使用MQ?

一、缘起 一切脱离业务的架构设计与新技术引入都是耍流氓。 引入一个技术之前&#xff0c;首先应该解答的问题是&#xff0c;这个技术解决什么问题。 就像微服务分层架构之前&#xff0c;应该首先回答&#xff0c;为什么要引入微服务&#xff0c;微服务究竟解决什么问题&…

Java中ByteArrayInputStream和ByteArrayOutputStream用法详解

Java中ByteArrayInputStream和ByteArrayOutputStream用法详解 这篇文章主要介绍了Java中ByteArrayInputStream和ByteArrayOutputStream用法详解&#xff0c; ByteArrayInputStream 的内部额外的定义了一个计数器&#xff0c;它被用来跟踪 read() 方法要读取的下一个字节 Byte…

Java中的Base64详解

详解Java中的Base64原理跟用法 简介 ​ Base64编码&#xff0c;是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法, 也是MIME&#xff08;多用途互联网邮件扩展&#xff0c;主要用…

Java程序执行Linux命令

java程序中要执行linux命令主要依赖2个类&#xff1a;Process和Runtime 首先看一下Process类&#xff1a; ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程&#xff0c;并返回 Process 子类的一个实例&#xff0c; 该实例可用来控制进程并获得相关信息。Proces…

ImageIO类说明

最近的项目中遇到ImageIO&#xff0c;因此记录下这个类的用法 一、ImageIO&#xff1a; 这个类中的方法都是静态方法&#xff0c;可以用来进行简单的图片IO操作 1、读入的三种方法 public static BufferedImage read(File input) File file new File("/Users/xixi/Docum…

java:图像(BufferedImage)色彩空间转换(灰度)暨获取图像矩阵数据byte[](sRGB/gray)

ColorConvertOp java.awt.image包下面有个类java.awt.image.ColorConvertOp,类名直译就是”颜色转换操作”。 顾名思义,它的作用就是将一个色彩空间(color space)的图像转换为另一个色彩空间的图像。有了这个神器我们就能轻易的将一张彩色图你像转换成灰度(gray)或其他色彩空间…

MyBatis-Plus updateById方法更新不了空字符串/null解决方法

最近遇到了Mybatis-Plus updateById()&#xff0c;更新某一个字段为null&#xff0c;却发现没有更新成功。记录一下 一、简介 因为最近在忙项目&#xff0c;好久都没有更新博客&#xff0c;最近在项目中刚好遇到一个问题&#xff0c;就是在使用MyBatis-Plus updateById&#…

Java 分割字符串的方法String.split()底层原理与使用

文章目录split()底层原理1.举例说明2.split源码分析3.API原解4.regex参数API原解5.limit参数介绍6.结果的验证7.此方法的使用split方法的使用split用法分析参数解释—regex参数解释—limit不同limit值的情况下的split结果验证扩展split()底层原理 1.举例说明 1.最普通的用法 …

HttpClient使用和详解

文章目录一、关于HttpClient二、HttpClient使用步骤详解1、创建一个HttpClient对象A、HttpCLientConnectionManagerB、HttpRoutePlannerC、RequestConfig2、创建一个Request对象3、执行Request请求4、处理response1&#xff09;关闭和entity相关的content stream2&#xff09;关…

你还在 Docker 中跑 MySQL?

容器的定义&#xff1a;容器是为了解决“在切换运行环境时&#xff0c;如何保证软件能够正常运行”这一问题。 目前&#xff0c;容器和 Docker依旧是技术领域最热门的词语&#xff0c;无状态的服务容器化已经是大势所趋&#xff0c;同时也带来了一个热点问题被大家所争论不以&…

使用mybatis-plus来自定义排序

需求&#xff1a; 先时间升序排序&#xff0c;相同的时间在按状态排序&#xff0c;状态的顺序为1 在线 4 潜伏 2 隐身 3 离开&#xff0c;状态相同在按姓名升序排序对排序好的数据进行分页运用mybatis-plus中QueryWrapper 1.导入依赖 <dependencies><dependency>…

Postman实现接口测试(附项目实战)

文章目录Postman实现接口测试1.Postman介绍和安装2. Postman安装2.1 安装方式2.2 安装步骤3. Postman入门示例Postman基本用法Postman高级用法1. 管理用例2. Postman断言3. 全局变量与环境变量5. Postman关联6. 批量执行测试用例7. 读取外部文件实现参数化Postman测试报告目标项…

Postman 使用教程详解

Postman页面 2、新建一个项目 直接点击左边栏上面的添加目录图标来新增一个根目录&#xff0c;这样就等于新建了一个项目&#xff0c;我们可以把一个项目或一个模块的用例都存放在这个目录之下&#xff0c;并且在根目录之下我们还可以在建立子目录来进行功能用例的细分&#…

Springboot dubbo @Service @Transactional 无法提供服务或者无法提供事务的解决办法

问题场景&#xff1a; 今天在springboot中集成spring事务的时候&#xff0c;遇到了一个大坑。如果&#xff08;springbootdubbo&#xff09;中添加 Service、Transactional 两个注解的时候&#xff0c;就不能进行dubbo服务注册了。 解决历程&#xff1a; 1&#xff0c;先是在…

什么是 serialVersionUID ? 序列化对象时必须提供 serialVersionUID 吗?

什么是 serialVersionUID &#xff1f; 序列化对象时必须提供 serialVersionUID 吗&#xff1f; 1&#xff0c;什么是 serialVersionUID &#xff1f; 顾名思义&#xff0c;serialVersionUID是序列化版本号。所有可序列化的类&#xff0c;都有一个静态serialVersionUID属性&a…