字符串操作异常-----java.lang.UnsupportedOperationException: null
程序员文章站
2022-04-11 17:28:20
...
java.lang.UnsupportedOperationException: null
一段很简单的代码,按逗号分割字符串,转为数组。
String rids="12-x5-klp,ds-uf-00-01,58-69-43-2";
List<String> listRid = Arrays.asList(rids.split(","));
分割完之后,根据需求,要按条件对 listRid 做过滤,需要执行listRid.remove() ,这个时候就遇到了UnsupportedOperationException。按理说remove执行没有任何问题,于是查找源码,发现
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
这里面返回的ArrayList<>是Arrays类下的内部类,并非java.util.ArrayList,虽然两者都继承自AbstractList,但前者并没有重写add、remove等方法,而AbstractList本身的add、remove等方法是直接抛出异常的!!!
/**
* {@inheritDoc}
*
* <p>This implementation always throws an
* {@code UnsupportedOperationException}.
*
* @throws UnsupportedOperationException {@inheritDoc}
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E remove(int index) {
throw new UnsupportedOperationException();
}
解决方案:
将生成的ArrayList再转化一次。
List<String> listRids = new ArrayList<>(Arrays.asList(rids.split(",")));