Java 集合引发不需要的异常
从Java 集合引发不需要的异常,java,collections,java-8,Java,Collections,Java 8,从Collections.nCopies()规范: “返回一个不可变列表,该列表由指定 对象。” 所以从我的理解来看,它的迭代器必须抛出UnsupportedOperationException 但是,它的迭代器不会抛出UnsupportedOperationException,而是抛出IllegalStateException public class Main { public static void main(String args[]) throws Exception
Collections.nCopies()
规范:
“返回一个不可变列表,该列表由指定
对象。”
所以从我的理解来看,它的迭代器必须抛出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();
}
}
公共类主{
公共静态void main(字符串args[])引发异常{
最终列表c=集合.nCopies(1,“副本”);
c、 迭代器().remove();
}
}
为什么会这样?请帮助我理解此行为。迭代器的异常文档。删除说明: 非法状态异常-如果尚未调用下一个方法,或 在上次调用后,已调用remove方法 下一种方法 这就是你的情况。在测试代码时,如果我先调用
next
,我会得到预期的UnsupportedOperationException
:
final List<String> c = Collections.nCopies(1, "a");
Iterator<String> iterator = c.iterator();
iterator.next();
iterator.remove(); //java.lang.UnsupportedOperationException
final List c=Collections.nCopies(1,“a”);
迭代器迭代器=c.迭代器();
iterator.next();
iterator.remove()//java.lang.UnsupportedOperationException
但是如果我们不调用下一个方法呢first@11223那么也许迭代器不是您想要使用的<代码>迭代器。删除