一尘不染

为什么数组不能分配给Iterable?

java

使用Java5,我们可以编写:

Foo[] foos = ...
for (Foo foo : foos) 

或仅在for循环中使用Iterable。这非常方便。

但是,您不能像这样编写可迭代的通用方法:

public void bar(Iterable<Foo> foos) { .. }

并使用数组调用它,因为它不是Iterable:

Foo[] foos = { .. };
bar(foos);  // compile time error 

我想知道这个设计决定背后的原因。


阅读 328

收藏
2020-03-24

共1个答案

一尘不染

数组可以实现接口(Cloneablejava.io.Serializable)。那为什么不Iterable呢?我猜想Iterable强制添加iterator方法,而数组不实现方法。char[]甚至不覆盖toString。无论如何,应将引用数组视为不理想的-使用Lists。如dfa注释所示,Arrays.asList将为你明确进行转换。

(话虽如此,你可以调用clone数组。)

2020-03-24