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/

10-13 08:00