慎用asList方法直接定义集合

示例代码demo:

public static void main(String[] args) {
    List<String> list = Arrays.asList("张三", "李四", "王五");
    list.add("赵六");
}

运行结果:
在这里插入图片描述

可以发现直接抛出了异常。

接下来追踪下该异常抛出的原因,asList()方法返回的是一个ArrayList对象,如下:
在这里插入图片描述
看看ArrayList对象,如下:
在这里插入图片描述

发现ArrayList类是Arrays类下的一个静态类,不是平时常用的ArrayList类,二者是不同的,如下:
在这里插入图片描述
从异常截图来看,异常是调用add()方法后抛出来的,接下来看看这个ArrayList类所拥有的方法,如下:
在这里插入图片描述
没有一个add()方法,那么add()方法就是该类的父类提供的了,看看它的父类AbstractList类提供的add()方法,如下:
在这里插入图片描述
在这里插入图片描述
最后会调用到的add()方法会抛出上图截图中的异常,所以新增元素报异常根源找到了。

总结

从以上集合新增元素操作会抛出异常以及跟踪到的源码来看,通过asList()方法返回的是一个长度不可变的集合,数组多长,集合就是多长,所以除非集合是只读的,不然不建议用asList方法直接定义集合,毕竟如果把该集合对象发布出去,可能被影响的地方就多了。

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/108352575