我制作单元测试接口列表。简单的代码,但我无法理解,为什么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
答案 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