我经常在很多地方看到,应该避免返回一个iterable
而应该返回一个collection
。例如 -
public Iterable<Maze> Portals() {
// a list of some maze configurations
List<Maze> mazes = createMazes();
...
return Collections.unmodifiableList(mazes);
}
返回一个iterable
只有在使用foreach
循环时才有用,而collection
已经提供了一个iterator
并且提供了更多的控制。请问什么情况下特别返回iterable
会有益呢?或者我们应该总是返回collection
呢?
注意:这个问题与Guava库无关。
Iterable
还是在Collection
引用中保持,基础集合实现仍然是相同的。 - SimonCIterable
类型的变量或Collection
类型的变量保存,同样的事情仍会发生。被修改的集合仍然是相同的具体类型。 - SimonCConcurrentModificationException
表示编程错误。如果你知道另一个线程可能会修改集合,你不应该有意地访问它,除非进行某种形式的同步。使用Collection
上的方法来访问正在被另一个线程修改的集合可能避免抛出异常,但行为是不可预测的。 - SimonC