欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字符串操作异常-----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(",")));