根据Collections.nCopies()
规范:
“返回由指定副本的n个副本组成的不可变列表 对象。”
因此,据我了解,迭代器必须抛出UnsupportedOperationException
但是它的迭代器不会抛出UnsupportedOperationException
,而是抛出IllegalStateException
public class Main {
public static void main(String args[]) throws Exception {
final List<String> c = Collections.nCopies(1, "copies");
c.iterator().remove();
}
}
为什么这样表现?请帮助我了解这种行为。
答案 0 :(得分:3)
Iterator.remove
的异常文档说:
IllegalStateException -如果尚未调用下一个方法,或者 在最后一次调用the之后,remove方法已经被调用 下一个方法
这就是您的情况。测试您的代码,如果我先调用next
,则会得到预期的UnsupportedOperationException
:
final List<String> c = Collections.nCopies(1, "a");
Iterator<String> iterator = c.iterator();
iterator.next();
iterator.remove(); //java.lang.UnsupportedOperationException