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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin空安全 ⑥ ( 先决条件函数 | checkNotNull 函数 | require 函数 | requireNotNull 函数 | error 函数 | assert 函数 )相关的知识,希望对你有一定的参考价值。

文章目录





一、先决条件函数




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: 变量为空


上述使用的 先决条件函数 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
    

以上是关于Kotlin空安全 ⑥ ( 先决条件函数 | checkNotNull 函数 | require 函数 | requireNotNull 函数 | error 函数 | assert 函数 )的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin中空安全操作符,异常处理和自定义异常,以及先决条件函数详解

Kotlin中空安全操作符,异常处理和自定义异常,以及先决条件函数详解

Kotlin空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )

From Java To Kotlin:空安全扩展函数Lambda很详细,这次终于懂了

From Java To Kotlin:空安全扩展函数Lambda很详细,这次终于懂了

Kotlin空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )