java为什么数组不能分配给Iterable?
使用Java5,我们可以编写:
Foo[] foos = ...
for (Foo foo : foos)
或者只是在for循环中使用Iterable。这很方便
但是,您不能为iterable编写这样的通用方法:
public void bar(Iterable<Foo> foos) { .. }
并使用数组调用它,因为它不是Iterable:
Foo[] foos = { .. };
bar(foos); // compile time error
我想知道这个设计决定背后的原因
# 1 楼答案
不幸的是,数组不够。它们不实现
Iterable
接口虽然数组现在是实现可克隆和可序列化的对象,但我相信数组不是正常意义上的对象,也不实现接口
可以在每个循环中使用它们的原因是Sun为数组添加了一些合成糖(这是一个特例)
由于数组一开始在Java1中是“几乎对象”,所以在Java中,要使它们成为真正的对象,变化太过剧烈
# 2 楼答案
数组是一个对象,但其项可能不是。数组可能包含int这样的基本类型,Iterable无法处理。至少我是这么想的