Aarrays.asList产生的list对象在使用add或者remove方法时,抛异常java.lang.UnsupportedOperationException

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lx_nhs/article/details/82219094

异常代码如下:

    public static void main(String[] args) {
        String[] strArr = {"1","2","3"};
        List<String> list = Arrays.asList(strArr);
        list.add("4");
    }

抛出异常:

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.yidu.edu.card.service.impl.UserWxappServiceImpl.main(UserWxappServiceImpl.java:375)

原因:

 Aarrays.asList产生的list对象是其内部类ArrayList, 而不是java.utils.ArrayList对象. 两个ArrayList都继承了AbstractList抽象类, 但是前者没有重写抽象类的add()和remove()方法, 如果调用, 则会抛出java.lang.UnsupportedOperationException;

AbstractList抽象类add和remove方法如下:

    /**
     * {@inheritDoc}
     *
     * <p>This implementation always throws an
     * {@code UnsupportedOperationException}.
     *
     * @throws UnsupportedOperationException {@inheritDoc}
     * @throws ClassCastException            {@inheritDoc}
     * @throws NullPointerException          {@inheritDoc}
     * @throws IllegalArgumentException      {@inheritDoc}
     * @throws IndexOutOfBoundsException     {@inheritDoc}
     */
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

    /**
     * {@inheritDoc}
     *
     * <p>This implementation always throws an
     * {@code UnsupportedOperationException}.
     *
     * @throws UnsupportedOperationException {@inheritDoc}
     * @throws IndexOutOfBoundsException     {@inheritDoc}
     */
    public E remove(int index) {
        throw new UnsupportedOperationException();
    }

猜你喜欢

转载自blog.csdn.net/lx_nhs/article/details/82219094