首页 > 解决方案 > 集合引发的不需要的异常

问题描述

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

为什么会这样?请帮助我理解这种行为。

标签: javacollectionsjava-8

解决方案


的异常文档Iterator.remove说:

IllegalStateException - 如果还没有调用下一个方法,或者在最后一次调用下一个方法之后已经调用了 remove 方法

这就是您的情况。测试你的代码,如果我next先打电话,我会得到预期的UnsupportedOperationException

final List<String> c = Collections.nCopies(1, "a");
Iterator<String> iterator = c.iterator();

iterator.next();
iterator.remove(); //java.lang.UnsupportedOperationException

推荐阅读