为什么我更喜欢checkState而不是断言?

时间:2014-07-18 18:34:19

标签: java guava

使用checkState而不是assert有什么好处吗?我记得在某个地方读到我应该更喜欢checkState,但我记不起为什么。

1 个答案:

答案 0 :(得分:2)

checkStateassert的目的完全不同。

checkState前置条件检查,如果调用方在程序处于该方法可能不属于的状态时调用您的方法,则会引发异常调用。 (这意味着他们错误地使用了您的代码;他们应该能够通过正确使用它来避免在错误的时间调用该方法。)

assert通常最多是对您知道必须在程序中的某个位置(某种已编译的注释)的内容进行完整性检查。此外,根据启动JVM时的标志,可以启用或禁用assert。在生产中禁用它是典型的。因此,即使你以某种方式进入一种你无法断言的状态,你也不能依赖它来打破方法的流程。

Guava的新版本(截至17.0)Verify类类似assert,总是启用,但不完全正确;它适用于不应发生的情况,但如果某些外部服务(即您的代码正在调用的服务,而不是调用您的代码)可能会以其声称不应该的方式运行。有关PreconditionsassertVerify之间差异的更多信息,请参阅其Javadoc。