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

标签 java language-design

使用 Java5 我们可以编写:

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

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

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

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

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

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

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

最佳答案

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

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

关于java - 为什么数组不能分配给Iterable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1160081/

相关文章:

php - 为什么我不能在函数的返回值上使用数组索引?

java - 在字符串集合中查找以特定字符开头的字符串的最快方法

java - Android JSON 解析导致应用程序 AsyncTask 崩溃

actionscript-3 - 向 AVM2 添加语言

.net - 为什么属性 setter 和 getter 与get_X和set_X方法冲突?

r - ->(右箭头)和 <-(左箭头)在 for 循环中的不同行为

java - 春兔回复同一个队列

java - 如何限制 Android 设备不打开某些特定网站,例如 youtube、facebook

java - HttpServletResponse.getOutputStream.print(string) 与 getWriter(String) 的性能和大小限制

c - gcc 实际上是否将原型(prototype)视为函数并且它们的参数是否分配了内存?