文章目录

  • ​​一、先决条件函数​​
  • ​​1、先决条件函数概念​​
  • ​​2、先决条件函数原型​​
  • ​​3、先决条件函数代码示例​​






一、先决条件函数




1、先决条件函数概念



在 Kotlin 中提供了一些 内置函数 ,

在这些函数中可以抛出 携带自定义信息的异常 ,

这些函数 就是 " 先决条件函数 " ;



只有满足了 先决条件函数 的 先决条件 , 代码才能继续执行 , 否则就会抛异常 ;



2、先决条件函数原型



常用的先决条件函数如下 :

  • checkNotNull 函数 :
  • 参数为 ​​null​​​ , 抛出 ​​IllegalStateException​​ 异常 ,
  • 参数为非空 , 返回非空值 ;
/**
* 如果[value]为空,则抛出[IllegalStateException]。否则
* 返回非空值。
*
* @sample samples.misc.Preconditions.failCheckWithLazyMessage
*/
@kotlin.internal.InlineOnly
public inline fun <T : Any> checkNotNull(value: T?): T {
contract {
returns() implies (value != null)
}
return checkNotNull(value) { "Required value was null." }
}
  • require 函数 :
  • 参数为 ​​false​​​ , 抛出 ​​IllegalArgumentException​​ 异常 ;
/**
* 如果[value]为false,则抛出[IllegalArgumentException]。
*
* @sample samples.misc.Preconditions.failRequireWithLazyMessage
*/
@kotlin.internal.InlineOnly
public inline fun require(value: Boolean): Unit {
contract {
returns() implies value
}
require(value) { "Failed requirement." }
}
  • requireNotNull 函数 :
  • 参数为 ​​null​​​ , 抛出 ​​IllegalArgumentException​​ 异常 ;
  • 参数非空 , 返回非空值 ;
/**
* 如果[value]为空,则抛出[IllegalArgumentException]。否则返回非空值。
*/
@kotlin.internal.InlineOnly
public inline fun <T : Any> requireNotNull(value: T?): T {
contract {
returns() implies (value != null)
}
return requireNotNull(value) { "Required value was null." }
}
  • error 函数 :
  • 参数为 ​​null​​​ , 使用给定的 错误信息 抛出 ​​IllegalStateException​​ 异常 ;
  • 参数非空 , 返回非空值 ;
/**
* 使用给定的[message]抛出[IllegalStateException]。
*
* @sample samples.misc.Preconditions.failWithError
*/
@kotlin.internal.InlineOnly
public inline fun error(message: Any): Nothing = throw IllegalStateException(message.toString())
  • assert 函数 :
  • 参数为 ​​false​​​ , 抛出 ​​AssertionError​​ 异常 , 并进行 断言标记 ;
/**
* 如果[value]为false,则抛出[AssertionError]
* 和运行时断言已经使用*-ea* JVM选项在JVM上启用。
*/
@kotlin.internal.InlineOnly
public inline fun assert(value: Boolean) {
assert(value) { "Assertion failed" }
}



3、先决条件函数代码示例



代码示例 : 在执行 ​​name​​​ 字符串的 ​​count​​ 函数之前 ,

先使用 ​​checkNotNull(name, {"变量为空"})​​​ 先决条件函数 , 判定 ​​name​​ 是否为空 ,

如果为空 , 抛出带信息的 ​​IllegalStateException​​ 异常 信息 ;

fun main() {
var name: String? = null

// 捕获并处理异常
try {
checkNotNull(name, {"变量为空"})
name!!.count();
} catch (e: Exception) {
println(e)
}
}

执行结果 :

java.lang.IllegalStateException: 变量为空

【Kotlin】空安全 ⑥ ( 先决条件函数 | checkNotNull 函数 | require 函数 | requireNotNull 函数 | error 函数 | assert 函数 )_android



上述使用的 先决条件函数 checkNotNull 原型 :

/**
* 如果[value]为空,则使用调用[lazyMessage]的结果抛出[IllegalStateException]。否则
* 返回非空值。
*
* @sample samples.misc.Preconditions.failCheckWithLazyMessage
*/
@kotlin.internal.InlineOnly
public inline fun <T : Any> checkNotNull(value: T?, lazyMessage: () -> Any): T {
contract {
returns() implies (value != null)
}

if (value == null) {
val message = lazyMessage()
throw IllegalStateException(message.toString())
} else {
return value
}
}