天天看點

java.lang.UnsupportedOperationException以及Arrays.asList()

public class ArrayListTest {
    public static  void main(String[] args){
        Map<String,List<String>> map = new HashMap<>();
        map.put("name", Arrays.asList("111","222"));
        List list = map.get("name");
        //Arrays.asList 不能調用add remove方法
        list.add("333");
    }
}
           

調用list.add方法就會報java.lang.UnsupportedOperationException,原因為Arrays.asList()傳回的并不是util包下的ArrayList而是繼承AbstractList的定長ArrayList,是以他沒有add和renmove方法,以下為源碼:

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        
        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
    }

public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }