有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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 

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


共 (2) 个答案

  1. # 1 楼答案

    不幸的是,数组不够。它们不实现Iterable接口

    虽然数组现在是实现可克隆和可序列化的对象,但我相信数组不是正常意义上的对象,也不实现接口

    可以在每个循环中使用它们的原因是Sun为数组添加了一些合成糖(这是一个特例)

    由于数组一开始在Java1中是“几乎对象”,所以在Java中,要使它们成为真正的对象,变化太过剧烈

  2. # 2 楼答案

    数组是一个对象,但其项可能不是。数组可能包含int这样的基本类型,Iterable无法处理。至少我是这么想的