我浏览了一些Java标准库代码,并在String.java(toUpperCase
- JDK 1.6.0_32 x64)中找到了java.lang.String
方法。我在下面的代码段中删除了代码中不相关的部分。
困扰我的部分是scan: { ... }
语法。我的印象是lambda表达式不是SE 6或7的一部分。有人可以赐教我吗?
// String.java - line 2547 onwards.
public String toUpperCase(Locale locale) {
// Do stuff.
/* Now check if there are any characters that need to be changed. */
scan: {
// Do stuff.
}
// Do more stuff.
}
答案 0 :(得分:4)
scan: { ... }
它是Labeled Statements。通常标签用于嵌套循环的情况,您可以在其中断开或继续循环。
例如:
outer:while(cond) {
in:while(cond){
break outer;
}
}
答案 1 :(得分:3)
它被称为带标签的陈述。 scan
在此标注,声明包含在{...}
。
根据Java Language Specification 14.7
通过执行立即包含的Statement来执行带标签的语句。 如果语句由标识符标记,并且由于中断了相同的标识符而包含的语句突然完成,则标记的语句正常完成。在突然完成声明的所有其他情况下,标签声明因同样的原因而突然完成
答案 2 :(得分:3)
即使您没有循环,也可以拥有一个Label(通常在UPPER_CASE中)。 e.g。
scan: {
if (condition) break;
// do something
}
我使用它的唯一地方是避免“找到”标志
FOUND: {
for(MyType mt: myTypeList)
if(condtion(mt))
break FOUND;
// not found code here
}
如果你想写一个令人困惑的标签,你可以做
http://www.google.com
if (searching) {
}