Kotlin 1.3带来了一个新功能,即合约,以及带有它们的功能require()
,但它看起来与assert()
非常相似。这是他们的KDoc所说的:require(value: Boolean)
:如果IllegalArgumentException
为false,则抛出value
。assert(value: Boolean)
:如果AssertionError
为false且已使用-ea JVM选项在JVM上启用了运行时断言,则抛出value
。
那么什么时候应该使用require()
和什么时候应该使用assert()
呢?
最佳答案
假设您要一个函数来计算 n! (阶乘)像这样:
fun factorial(n: Long): Long {
require(n >= 0) { "Number must no be negative" }
// code
}
在这种情况下,
require()
检查传递给函数的参数的有效性,如果该参数不符合要求,则抛出一个IllegalArgumentException
,对于调试,您还会得到解释性消息。另一方面,
assert()
可以在代码中的任何地方使用,以进行自己的专门检查,如果启用了运行时断言。也有
当
check(Boolean)
的参数为false时,它会抛出IllegalStateException
,用于检查对象状态。
因此,以上每一项在代码中都有自己的位置,如果发现有用,可以使用它。
关于kotlin - require和assert有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53139249/