小编典典

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

all

使用 Java5,我们可以编写:

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

或者只是在 for 循环中使用 Iterable。这非常方便。

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

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

并用数组调用它,因为它不是可迭代的:

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

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


阅读 112

收藏
2022-07-16

共1个答案

小编典典

数组可以实现接口
(Cloneablejava.io.Serializable)。那为什么不Iterable呢?我猜想Iterable强制添加一个iterator方法,而数组不实现方法。char[]甚至不覆盖toString.
无论如何,引用数组应该被认为不太理想 - 使用Lists。正如 dfa 评论,Arrays.asList将明确地为您进行转换。

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

2022-07-16