使用 Java5 我们可以编写:
Foo[] foos = ...
for (Foo foo : foos)
或者只是在 for 循环中使用 Iterable。这非常方便。
但是,您不能像这样为可迭代编写通用方法:
public void bar(Iterable<Foo> foos) { .. }
并用数组调用它,因为它不是 Iterable:
Foo[] foos = { .. };
bar(foos); // compile time error
我想知道这个设计决定背后的原因。
最佳答案
数组可以实现接口(interface)(Cloneable
和 java.io.Serializable
)。那么为什么不 Iterable
呢?我猜 Iterable
强制添加一个 iterator
方法,而数组不实现方法。 char[]
甚至不覆盖 toString
。无论如何,引用数组应该被认为不太理想 - 使用 List
s。正如 dfa 评论的那样,Arrays.asList
将明确地为您进行转换。
(话虽如此,你可以在数组上调用clone
。)
关于java - 为什么数组不能分配给Iterable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1160081/