UnsupportedOperationException
问题描述
将Arrays.asList()的返回结果进行remove时弹出一个UnsupportedOperationException,二脸懵逼。。查找网上别的大神分析明白了原因,做个笔记!
@Test
public void test(){
List<String> list = Arrays.asList(",dddd,".split(","));
System.out.println(list);
System.out.println(list.get(0));
list.remove(0);
System.out.println(list);
}
可以看出正确完整了转换,但是进行remove操作时抛出了这个异常
分析源码原因如下
1、虽然asList的返回值时ArrayList<> ,但是这个并不是我们平时使用的那个List,而是一个继承于AbstractList的静态内部类
private static class ArrayList<E> extends AbstractList<E>
2、它并没有实现AbstractList的remove方法。
* @throws ==UnsupportedOperationException if the {@code add} operation
*/
public boolean add(E e) {
add(size(), e);
return true;
问题的解决
使用ArrayList的构造方法,进行一次转化,这样就可以保证得到一个我们熟悉的List
List<String> list = new ArrayList<>( Arrays.asList(",dddd,".split(",")));