问题描述
以下代码中,给List对象添加元素的时候,会报错
package com.example; import java.util.Arrays; import java.util.List; public class Demo { public static void main(String[] args) { List<String> list = Arrays.asList("Tom", "Jack", "Steve"); System.out.println(list); // [Tom, Jack, Steve] list.add("Jone"); System.out.println(list); } }
报错信息
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at com.example.Demo.main(Demo.java:16)
原因分析
查看源码,发现Arrays.asList
确实返回了ArrayList
,代码应该没有问题
public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
继续查看源码,发现
// Arrays.asList 返回的是内部类 java.util.Arrays.ArrayList // 我们需要的是 java.util.ArrayList
解决方法
类型转换即可
package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Demo { public static void main(String[] args) { List<String> list = new ArrayList<>(Arrays.asList("Tom", "Jack", "Steve")); System.out.println(list); // [Tom, Jack, Steve] list.add("Jone"); System.out.println(list); // [Tom, Jack, Steve, Jone] } }
参考