前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin】空安全 ⑥ ( 先决条件函数 | checkNotNull 函数 | require 函数 | requireNotNull 函数 | error 函数 | assert 函数 )

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

作者头像
韩曙亮
发布2023-03-30 18:39:50
2K0
发布2023-03-30 18:39:50
举报
文章被收录于专栏:韩曙亮的移动开发专栏
在这里插入图片描述
在这里插入图片描述

文章目录

一、先决条件函数


1、先决条件函数概念

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

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

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

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

2、先决条件函数原型

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

  • checkNotNull 函数 :
    • 参数为 null , 抛出 IllegalStateException 异常 ,
    • 参数为非空 , 返回非空值 ;
代码语言:javascript
复制
/**
 * 如果[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 异常 ;
代码语言:javascript
复制
/**
 * 如果[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 异常 ;
    • 参数非空 , 返回非空值 ;
代码语言:javascript
复制
/**
 * 如果[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 异常 ;
    • 参数非空 , 返回非空值 ;
代码语言:javascript
复制
/**
 * 使用给定的[message]抛出[IllegalStateException]。
 *
 * @sample samples.misc.Preconditions.failWithError
 */
@kotlin.internal.InlineOnly
public inline fun error(message: Any): Nothing = throw IllegalStateException(message.toString())
  • assert 函数 :
    • 参数为 false , 抛出 AssertionError 异常 , 并进行 断言标记 ;
代码语言:javascript
复制
/**
 * 如果[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 异常 信息 ;

代码语言:javascript
复制
fun main() {
    var name: String? = null

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

执行结果 :

代码语言:javascript
复制
java.lang.IllegalStateException: 变量为空
在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
/**
 * 如果[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
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、先决条件函数
    • 1、先决条件函数概念
      • 2、先决条件函数原型
        • 3、先决条件函数代码示例
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档