- 起因
发现在用Arrays.asList初始化的List在进行add操作的时候报java.lang.UnsupportedOperationException
示例如下:
public static void main(String[] args) {
List<Object> argList = Arrays.asList("1", "2", "3", null);
argList.add("44");
System.out.println(argList);
}
- 找问题
可以看到Arrays.asList内部new的ArrayList并不是我们以为的java.util.ArrayList,java.util.ArrayList在进行add操作的时候会进行扩容,如下图:
但是Arrays.asList内部实现的ArrayList并没有重写add操作,那么他父类的add操作是咋样的呢,如下图:
可以看到只要add就会异常!
- 解决方案
再包一层ArrayList,问题可解。
- 总结
所以呢,Arrays.asList适合的是那些不会去改变大小的操作。
使用姿势不对,盲目使用就会掉进这样的坑,记录一下,防止后续再摔跤!
来源:oschina
链接:https://my.oschina.net/u/3095034/blog/4277488