【发布时间】:2015-04-07 10:13:53
【问题描述】:
所有 Java Collections 都实现了Iterable,因此它们必须提供一个Iterator,它指定了一个可选方法remove()。当在Iterator 上调用remove() 时,它可以抛出一个UnsupportedOperationException。
我如何知道 Java 标准库中的 Collection 是否会在不运行代码的情况下返回支持 remove() 的 Iterator?
当然,我希望这些信息出现在该类的remove() 方法的Javadoc 中,结果却发现了一堆超类和接口的链接。例如:http://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html#iterator-- 我也没有找到任何关于链接的说明。
【问题讨论】:
-
唯一真正的方法是尝试处理异常,我知道很糟糕。 Collections API 不是设计最优雅的 API,它不应该有大多数核心接口的可变和可变版本
-
如果您阅读了您链接到的 TreeSet 的类级文档,这意味着 remove() 实际上确实有效。很高兴看到一些示例代码...
-
最好的办法是阅读 javadoc。例如
Arrays.asList表示返回的列表具有固定大小,因此您可以想象它的迭代器无法删除。大多数“标准”集合都是可变的并且允许删除。 -
这是一个真正的问题吗?您是否真的在编写必须处理多种迭代器的代码,这些迭代器可能支持也可能不支持删除?
标签: java interface iterable java-collections-api