使用Java5,我们可以编写:
Foo[] foos = ... for (Foo foo : foos)
或仅在for循环中使用Iterable。这非常方便。
但是,您不能像这样编写可迭代的通用方法:
public void bar(Iterable<Foo> foos) { .. }
并使用数组调用它,因为它不是Iterable:
Foo[] foos = { .. }; bar(foos); // compile time error
我想知道这个设计决定背后的原因。
数组可以实现接口(Cloneable和java.io.Serializable)。那为什么不Iterable呢?我猜想Iterable强制添加iterator方法,而数组不实现方法。char[]甚至不覆盖toString。无论如何,应将引用数组视为不理想的-使用Lists。如dfa注释所示,Arrays.asList将为你明确进行转换。
Cloneable
java.io.Serializable
Iterable
iterator
char[]
toString
Lists
Arrays.asList
(话虽如此,你可以调用clone数组。)
clone