在Java 中使用Iterable<T>vs.有哪些注意事项Collection<T>?
Iterable<T>
Collection<T>
例如,考虑实现一种主要涉及包含Foos 的集合以及一些关联的元数据的类型。这种类型的构造函数允许一次性初始化对象列表。(可以稍后设置元数据。)此构造函数应接受哪种类型?Iterable<Foo>或Collection<Foo>?
Foo
Iterable<Foo>
Collection<Foo>
此决定有哪些考虑因素?
通过库类型,如下面列出的模式集合ArrayList(这可以从任何被初始化Collection,但 不是 一个Iterable),会导致我使用Collection<Foo>。
ArrayList
Collection
Iterable
但是为什么不接受Iterable<Foo>,因为这足以满足初始化需求?为什么Collection消费者要求的功能等级()比严格要求的功能等级(Iterable)高?
许多集合类型以前都存在Iterable<T>(仅在1.5中引入)-几乎没有理由添加一个构造函数来接受Iterable<T> 以及, Collection<T>但是更改现有构造函数将是一项重大更改。
就个人而言,我会使用它Iterable<T>是否允许您做任何您想做的事情。它对调用者来说更加灵活,尤其是它使您可以使用Google Java Collections(无疑是类似的库)进行 相对 容易的过滤/投影/等操作。