在Java中,为什么我不能使用lambda作为增强的for循环表达式?
假设我们有一个 .因为是功能接口,我们可以这样写:Iterator<Integer> iterator
Iterable
Iterable<Integer> iterable = () -> iterator;
然后,我们当然可以用作增强的 for 循环表达式:iterable
for (Integer i : iterable) foo(i);
那么为什么是
for (Integer i : () -> iterator) foo(i);
不允许?(这会导致以下编译器错误:)
error: lambda expression not expected here
for (Integer i : () -> iterator) foo(i);
^
使目标类型显式化,例如
for (Integer i : (Iterable<Integer>) () -> iterator) foo(i);
显然有效,但是如果省略λ表达式的目标类型,为什么编译器不能推断出它呢?从表达式采用 λ 表示法的事实来看,编译器是否应不清楚目标类型不能为 ,因此必须是 ?Array
Iterable
这只是语言设计师的疏忽,还是我在这里错过了其他东西?