【发布时间】:2016-06-01 19:16:50
【问题描述】:
我一定是错过了什么。
在 Java 5 中,引入了 "for-each loop" statement (also called the enhanced for loop)。似乎它主要是为了迭代Collections而引入的。任何实现Iterable 接口的集合(或容器)类都可以使用“for-each 循环”进行迭代。也许由于历史原因,Java 数组没有实现Iterable 接口。但由于数组无处不在,javac 将接受在数组上使用 for-each 循环(生成相当于传统 for 循环的字节码)。
在 Java 8 中,forEach method 作为默认 方法添加到Iterable 接口。这使得将 lambda 表达式传递给集合(在迭代时)成为可能(例如list.forEach(System.out::println))。但同样,阵列不享受这种待遇。 (我知道有一些解决方法)。
是否有技术原因导致javac 无法增强以接受forEach 中的数组,就像它在增强的for 循环中接受它们一样?似乎不需要数组实现Iterable 就可以生成代码。我是不是太天真了?
这对于语言的新手来说尤其重要,因为它们语法简单,所以很自然地使用数组。切换到列表并使用Arrays.asList(1, 2, 3) 并不自然。
【问题讨论】:
-
可能是因为它不值得——集合比数组更容易使用,当您需要使用数组时,
asList(myArray)是一个非常简单的解决方法。 -
你在开玩笑吗?他们甚至没有自己的
toString()。 -
@Bohemian 是什么意思?
-
我们怎么知道答案会缺少参考而不允许答案?
-
可以将数组转换为 Java 8 流:
Arrays.stream(a).forEach(...);。我不知道为什么这个问题被关闭了,可能会有很好的答案。
标签: java arrays foreach java-8 javac