Arrays.asList()使用異常:java.lang.UnsupportedOperationException

Forest Young發表於2020-12-07

背景

在使用Arrays.asList()方法獲取一個list後,往list中add元素報UnsupportedOperationException異常

在這裡插入圖片描述

原因

Arrays.asList()可以輸出一個List,但是這種情況其底層表示的是陣列,因此不能調整大小

原始碼

    @SafeVarargs
    @SuppressWarnings("varargs")
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
    
 	/**
     * @serial include
     */
    private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
        ...
    }

注意:這裡的ArrayList其實是Arrays的一個靜態內部類,只不過繼承了AbstractList

相關文章