问题描述:
场景是本意是想将一个字符串分割成数组,然后转成List,于是使用了Arrays.asList()。但是随后的逻辑中,我用到了add()方法,执行后就报错:UnsupportedOperationException。
问题原因:
查看Arrays.asList()的实现,可以看到它的new ArrayList<>()采用了内部实现,继承了AbstractList。再查看AbstractList这个抽象类的add()方法,就发现了这个方法是直接抛出UnsupportedOperationException异常的。此外,还有remove()、set()方法。
解决方法:
可以使用Lists.newArrayList()代替Arrays.asList(),其下的new ArrayList<>()就是用的java util包下的,虽然它也继承了AbstractList,但是它有实现了add()等方法。
类似的,还有Collections类下的一些方法,比如Collections.singletonList()、Collections.emptyList(),也会直接抛出UnsupportedOperationException异常。