Java 中的标签 - 不好的做法?

Labels in Java - bad practice?

为什么在 Java 中使用标签是一种不好的做法?我找不到理由。所有解释 - 你不应该仅仅因为你不应该使用它。

很难读取包含 break 标签的代码。此外,标签可能会被意外移动,或者代码会插入到与标签相关的错误位置。编译器无法警告您这些影响,因为代码在语法上仍然有效。

难以阅读的代码很难维护。错误不可避免地会出现。

其他控制结构(breakcontinuewhilefor 等)不受此影响。

请注意,标签的 switch 也不会受到这些影响:switch 块的结构是明确定义的。

打破嵌套循环的最明智的替代方法是将代码重新转换为函数并使用 return。您还可以获得额外的好处,即能够(可能)return 将值返回给调用者。

我认为你指的是 break and continue 标签。

问题是标记为 break(并继续)的命令式语言的构造绝对与面向对象无关。

在面向对象的程序中,流程很容易理解。不能从一段代码跳转到另一段代码,只能调用一个方法或者继续当前代码或者退出当前代码块。

从一个位置跳到另一个位置可能是您的应用程序的中断点,很容易出现错误。跳跃创造所谓的spaghetti code

标签可以打破嵌套的 for 循环。我建议将嵌套循环放在一个单独的方法中,然后使用 return.

问题是复杂的处理流程变得很难遵循。

带标签的中断(和中断,以更小的方式)是更现代的等同于旧语言(FORTRAN、COBOL、Basic)的旧 GOTO 语句。发现 Goto 语句比所有其他类型的语句加起来更容易包含错误——我记得的研究测量它的可能性高 9 倍。这引发了 70 年代的 "structured programming" 运动,以及当时一些软件商店禁止使用 goto 语句。

能够轻松阅读代码比能够不受限制地编写代码更重要。