【错误记录】Arrays.asList 的坑

文章目录

概要

最近在写一个需求的时候用到了这个方法生成一个 List,接着再往里面添加数据的时候就报错了,比如下面的例子。

java 复制代码
public class Main {
    public static void main(String[] args) {
        List<Integer> res = Arrays.asList(1, 2, 3);
        res.add(4);
        System.out.println(res);
    }
}

结果就报错了:

原因

下面就来看下 Arrays.asList 的源码。

java 复制代码
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

上面会创建一个 ArrayList,这个 ArrayList 不是我们经常用的那一个,而是 Arrays 里面的内部类,这个 List 不支持新增和修改方法,所以一旦用了 add 或者 remove, 就会报错。

小结

说实话,第一次遇到这个错都有点懵,是真没想到 ArrayList 是 Arrays 里面的一个子类,所以如果要通过集合来创建一个可修改的集合,还是直接 new 比较好吧。

java 复制代码
public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
        list.add(4);
        list.add(5);
        System.out.println(list);
    }
}

如有错误,欢迎指出!!!

相关推荐
sufu106533 分钟前
说说内存泄漏的常见场景和排查方案?
java·开发语言·面试
羊锦磊1 小时前
[ CSS 前端 ] 网页内容的修饰
java·前端·css
hrrrrb1 小时前
【Java Web 快速入门】九、事务管理
java·spring boot·后端
isyangli_blog2 小时前
(2-10-1)MyBatis的基础与基本使用
java·开发语言·mybatis
一乐小哥2 小时前
从面试高频到实战落地:单例模式全解析(含 6 种实现 + 避坑指南)
java·设计模式
布朗克1682 小时前
Spring Boot项目通过RestTemplate调用三方接口详细教程
java·spring boot·后端·resttemplate
最初的↘那颗心3 小时前
Java 泛型类型擦除
java·flink
IT毕设实战小研4 小时前
基于Spring Boot校园二手交易平台系统设计与实现 二手交易系统 交易平台小程序
java·数据库·vue.js·spring boot·后端·小程序·课程设计
泉城老铁4 小时前
Spring Boot 中根据 Word 模板导出包含表格、图表等复杂格式的文档
java·后端