【发布时间】:2018-09-24 16:54:33
【问题描述】:
标签是否是 Java 语句,如果标签是语句,则它在 Java 语言规范中定义为语句吗?
我的问题与我发送给 Oracle 的错误报告中 Jan Lahoda 的以下回复有关。我无法在那里讨论它,因为我无法在 OpenJDK Jira 中获得帐户。
https://bugs.openjdk.java.net/browse/JDK-8211052
例如:
A: B: while (true) continue A;应用“continue”的语句不是“while (true) continue A;”,而是“B: while (true) continue A;”,规范要求 continue 的目标是 while/do/for 语句,这里没有实现.因此出现编译时错误。
我认为 Java 中的标签不是语句,在 Jan 的示例中,A 和 B 标签都与同一个 while 循环语句相关,因此不应触发编译时错误。
加法:
Java 中的 labeled while/do/for 语句不是 while/do/for 语句吗?
【问题讨论】:
-
@Thomas 这是一个理论用例。 Java 允许一个循环有多个标签,但
continue和brake语句在处理这些多个标签时存在不一致。 -
重读specification:它将“LabeledStatement”定义为“label: statement”,其中“statement”可以是“LabeledStatement”,因此“labelA: labelB: statment”应该 被允许(尽管它没有多大意义,我可能会错过一些东西)。只是为了完整:标签本身不是语句,但可以是语句的一部分。