使用Java5,我们可以编写:

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

或者只在for循环中使用Iterable.这很方便.

但是,您不能像这样编写Iterable的泛型方法:

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

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

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

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

推荐答案

数组可以实现接口(Cloneablejava.io.Serializable).那为什么不呢?我猜Iterable强制添加iterator方法,而数组不实现方法.char[]甚至不能超越toString.无论如何,引用数组应该被认为不是理想的——使用List.正如dfa comments 的那样,Arrays.asList将明确地为您进行转换.

(话虽如此,您可以在数组上调用clone.)

Java相关问答推荐

Lombok如何在不要求最终用户将其输出的情况下使用内部API?

当在具有约束布局的AlertDialogue内部使用时,回收器视图布局宽度很奇怪

在Spring Boot中测试时出现SQL语法错误

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

为什么一个Test的instance?& gt;在构造函数中接受非空对象?

在Spring Boot应用程序中导致";MediaTypeNotSupportdException&qot;的映像上载

Arrays.hashcode(int[])为不同的元素提供相同的散列

错误:不兼容的类型:Double不能转换为Float

Android应用程序为错误的显示类型 Select 尺寸文件

带有可选部分的Java DateTimeForMatter

在java中使用不同的application.properties-jar而不使用Spring

在缺少字段时使用Jackson With Options生成Optional.Empty()

在Oracle中调用输出参数在索引处缺少IN或OUT参数的函数

Java Flux中的延迟增加

无法在Java中获取ElastiCache的AWS CloudWatch指标

rest api服务 spring 启动中出现IllegalFormatConversionException

没有Google Play服务,Firebase Auth无法工作

使用Java线程进行并行编程