在方法中返回iterable是不好的做法吗?

hrv*_*hrv 7 java collections iterator

我经常在许多地方读过,应该避免返回iterable并返回collection.例如 -

public Iterable<Maze> Portals() {     
    // a list of some maze configurations
    List<Maze> mazes = createMazes();
    ...
    return Collections.unmodifiableList(mazes);
}
Run Code Online (Sandbox Code Playgroud)

因为返回a iterable只对在foreach循环中使用它有用,同时collection已经提供了一个iterator并提供了更多的控制.你能告诉我什么时候特意返回iterable一个方法是有益的吗?或者我们应该总是返回一个collection

注意:这个问题与Guava库无关

Ter*_* Li 12

Iterable当我们需要懒洋洋地加载包含大量元素的集合时,返回一个将是有益的.

以下来自Google Collections FAQ的引用似乎支持延迟加载的想法:

为什么如此强调迭代器和Iterables?

通常,当Iterable或Iterator足够时,我们的方法不需要传入Collection.这种区别对我们很重要,因为有时在谷歌我们使用非常大量的数据,这些数据可能太大而无法容纳在内存中,但可以在一些计算过程中从头到尾遍历.这样的数据结构可以实现为集合,但是它们的大多数方法都必须抛出异常,返回错误的答案或者执行不正确的操作.对于这些情况,Collection非常不合适; 圆孔中的方形钉.

Iterator表示元素的单向可滚动"流",Iterable是可以生成独立迭代器的任何东西.集合远不止于此,因此我们只在需要时才需要它.