为什么数组不能分配给可迭代?

2022-08-31 06:25:07

使用Java5,我们可以写:

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

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

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

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

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

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

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


答案 1

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

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


答案 2

数组是对象,但其项可能不是。数组可能包含像int这样的基元类型,Iterable无法处理。至少这是我所认为的。


推荐