使用checkState而不是assert有什么好处吗?我记得读过一些我更喜欢使用checkState的地方,但我不记得为什么。
最佳答案
checkState
和assert
具有完全不同的目的。checkState
是前提条件检查,如果在程序处于无法调用该方法的状态时调用方调用了您的方法,则该检查将引发异常。 (这意味着他们不正确地使用您的代码;通过正确使用它们,他们应该能够避免在错误的时间调用该方法。)
通常,assert
最多是对您知道程序中那时必须为真的某些东西(经过编译的注释的一种)的健全性检查。另外,根据启动JVM时的标志,可以启用或禁用assert
。通常在生产中禁用它。因此,即使您以某种方式进入无法断言的状态,也不能依靠它来中断方法的流程。
番石榴的新类(从17.0开始)Verify
类类似于assert
,该类始终启用,但不完全启用。这是在不应该发生的情况下,但是如果某些外部服务(即您的代码正在调用的服务,而不是正在调用您的代码)在某些情况下可能会表现出它不应该这样做的方式,则可能会发生。有关Preconditions
,assert
和Verify
之间的区别的更多信息,请参见其Javadoc。