您是否使用assert关键字或引发一些验证运行时异常?它给您带来什么好处,或者为什么您认为不值得使用呢?

最佳答案

如果条件为假,则声明将抛出运行时错误(AssertionError)。断言为您提供了一种简化的方式来记录,检查和强制执行代码的正确性标准。好处是用于定义和操纵这些正确性条件的语言级挂钩。如果您希望启用或禁用它们(存在一些关于是否是个好主意的争论),则可以从JVM命令行中启用。下面的一些评论者指出,除非在 Debug模式下运行,否则断言默认情况下处于禁用状态。我的做法是始终在包装器脚本中添加“-ea”(启用断言)。即使在性能敏感的代码中,对我来说,折衷还是权衡了我从断言中获得的安全性/正确性信心。 Assertions at OracleAPI Description for AssertionError

请注意,可能在您控制范围之外的预期或意外失败(异常)与断言失败之间的区别-断言失败记录了程序员的假设,并指出程序错误,而不是意外的外部情况或预期的异常情况。 如果发生断言失败,则说明程序员是错误地理解或错误地表示了程序,而不是其他错误或失败源。

在实践中,我用它来记录我做出的明显或非显而易见的假设以及在生成(特别是私有(private)/内部)代码时要强制执行的不变量,从而使我自己和其他人清楚为何要做出这些假设,在何处进行以及是否经过验证。比起评论要好得多。这是朝向Design by Contract的(小)步骤。

有效的Java项目#38“检查参数的有效性”(Google BooksAmazon.com)提供了参数检查与适当使用断言之间区别的有用表示。

与SO相关的:(Enabling assertions in netbeans),(Assertions vs. Exceptions),(Near duplicate, asking for examples),(Badly named, but very similar content)

10-07 15:50