【发布时间】:2019-02-13 03:08:57
【问题描述】:
以下编译没有任何错误:
class App {
boolean b;
boolean c;
void foo(List<Integer> ints) {
myLabel:
for (Integer i : ints) {
while (!b) {
if (c) {
continue myLabel;
}
}
};
}
}
但是如果我修改foo如下:
void foo(List<Integer> ints) {
myLabel:
ints.forEach(integer -> {
while (!b) {
if (c) {
continue myLabel;
}
}
});
}
我收到Error:(17, 21) undefined label: myLabel
有什么区别?据我所知,新的forEach只是增强for循环的捷径?
【问题讨论】:
-
因为你在一个单独的 (lambda) 函数中。
-
" 新的 forEach 只是增强 for 循环的快捷方式?" - 不,不是真的,它是一个采用闭包的方法,可以对传递给它的元素
-
@SLaks 但您可以访问 lambda 之外的变量。为什么不是标签?我想知道 JLS 是否指定了这个
-
我实际上尝试过
final myLabel想同样的事情,这显然本身就是一个语法错误。 @尤金 -
语法上完全不同,它只是一个方法调用。标签适用于循环而不是方法调用。
标签: java for-loop java-8 label