使用 Java5,我们可以编写:
Foo[] foos = ... for (Foo foo : foos)
或者只是在 for 循环中使用 Iterable。这非常方便。
但是,您不能像这样为可迭代编写通用方法:
public void bar(Iterable<Foo> foos) { .. }
并用数组调用它,因为它不是可迭代的:
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
List
Arrays.asList
(话虽如此,您可以调用clone数组。)
clone