java - 集合引发的不需要的异常
问题描述
从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();
}
}
为什么会这样?请帮助我理解这种行为。
解决方案
的异常文档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
推荐阅读
- java - 使用 log4j 2.13 时禁用 ORMLite 日志
- node.js - 服务器上的 base64 转换 - NodeJS
- php - 如何在php中对数组值求和?
- c# - 在循环内使用 LINQ 实体框架表达式中的变量获取最后一个值
- go - 使用 CloudSQL 和 Google App Engine 使用 Gorm 部署 Go 后端时出现服务器错误 500
- c# - 为什么我的 WPF 应用程序加载动画钢冻结?
- python - 从字符串列表中删除键和值
- sql - 使用 t-sql 从一组特定数字中获取 6 个数字的所有组合
- javascript - 双向范围滑块,具有两个方向的颜色
- python - 3D python scipy数据插值的问题-在结果数据上交换轴