【发布时间】:2013-02-04 07:22:25
【问题描述】:
我在看一些 2001 年的旧代码,发现了这个声明:
else {
do {
int c = XMLDocumentFragmentScannerImpl.this.scanContent();
if (c == 60) {
XMLDocumentFragmentScannerImpl.this.fEntityScanner.scanChar();
XMLDocumentFragmentScannerImpl.this.setScannerState(1);
break label913;
}
我以前从未见过这个,并在这里发现了标记的中断:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
这本质上不是像goto 那样工作吗?使用它甚至是一种好习惯吗?这让我很不安。
【问题讨论】:
-
label913定义在哪里? -
在这种情况下,大约 200 行之后在一个相当大的 switch 语句的末尾。
-
继续,标签名称将使代码处理代码块中标有标签的那部分代码
-
在这种情况下,那么,问题在于switch语句的大小!
-
这看起来像是生成的代码(实际上是一个解析器)。生成的代码中使用了很多不会在手写代码中使用的技巧(主要是因为它们使生成更容易)。
标签: java