接口列表方法add(int index,E element);为什么我有UnsupportedOperationEception?

时间:2016-08-24 15:22:28

标签: java list testing collections

我制作单元测试接口列表。简单的代码,但我无法理解,为什么testAdd()抛出UnsupportedOperationException但testSet()不会抛出此异常。

public class testList {
    private static List<Integer> testList = new ArrayList<>();

    public static void main(String[] args) {
        init();
        testGet();
        testSet();
        testAdd();
    }

    private static void init() {
        testList = Arrays.asList(0, 1, 2, 3, 1, 2, 5, 4);
    }

    private static void testGet() {
        assertEquals(Integer.valueOf(2), testList.get(2));
    }

    private static void testSet() {
        testList.set(6, 5);
        assertEquals(new Integer[]{0, 1, 2, 3, 1, 2, 5, 4}, testList.toArray());
    }

    private static void testAdd() {
        testList.add(0, 1);
        assertEquals(new Integer[]{1, 0, 2, 2, 3, 3, 4, 5, 4}, testList.toArray());
    }
}

这是来自AbstractList

enter image description here

2 个答案:

答案 0 :(得分:1)

Arrays.asList

返回原始列表的包装器,因此您将无法更改列表长度(add()remove())。

答案 1 :(得分:-2)

Arrays.toList(T... t)退回java.util.Arrays.ArrayList而非java.util.ArrayList

这个类是一个添加方法,是AbstractList的扩展 喜欢这个代码

public void add(int index, E element) {
    throw new UnsupportedOperationException();
}

因此抛出UnsupportedOperationException