使用C#,我逐渐喜欢IEnumerable<T>
界面。在很多情况下,您只需要提供和接受。此外,它在.Net库中很有用。例如,List<T>
类上的构造函数需要IEnumerable<T>
。
我现在必须使用Java,我自然希望使用等效的Iterable<T>
接口。但是,它似乎并不像我可以在任何地方使用它。似乎所有东西都使用扩展的Collection<T>
界面。为什么是这样?
例如,您有ArrayList<T>
构造函数,它带有Collection<T>
:
按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。
为什么不采用Iterable<T>
呢?
答案 0 :(得分:5)
Iterable仅在Java 5中添加。这意味着旧方法(大多数)使用集合。即使是可以采用Iterable的新方法也没有使用它。 :(
我认为问题在于大多数Iterable都是Collections。
答案 1 :(得分:2)
作为一个例子,你有一个ArrayList构造函数,它接受一个Collection
具有可预测的尺寸是好的,尤其是对于ArrayList(它确实使用toArray()来构建其底层Object [])
按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。
可爱的太阳懒得再次更新文档,它根本不使用迭代器; 实际上我自己几乎从不读过文档,因为它们往往是误导或者只是错误。
你也可以通过继承AbstractCollection(它只缺少size()和iterator()很容易实现)来轻松地将Iterable放入Collection中。
Iterable主要用于符合foreach
构造。
答案 2 :(得分:0)
因为他们希望允许对集合做更多的事情,而不仅仅是迭代它?