集合引发的异常异常

时间:2020-01-07 05:45:16

标签: java collections java-8

根据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();
        }
    }

为什么这样表现?请帮助我了解这种行为。

1 个答案:

答案 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