2.5 Kotlin可空类型

目录

可空类型的变量

安全调用运算符:"?."

Elvis运算符:"?:"

非空断言:"!!"


Kotlin刚推出来时就一直宣传解决Java中空指针的痛点。java.lang.NullPointerException这个熟不熟悉,哈哈怎么解决的呢?kotlin引入了可空类型,给开发者带来了完美的解决方案,下面就来学习学习一下kotlin中可空类型。

什么是可空类型?简单的理解就是可以为空的类型,换句话说就是任何实体类型跟null的组合。Kotlin中是在原有的类型后跟一个‘?’表示,比如:

Int?  String? Boolean?

可空类型的变量

kotlin中可以直接将一个变量声明为可空类型,允许它为空,比如:

fun main() {
    //可空变量声明,允许name为空
    var name: String?
    //对name 赋值为空
    name = null
    println(checkNull(name))
    name = "Alfred"
    println(checkNull(name))
}

fun checkNull(str: String?): String? {
    return str
}

结果:

null
Alfred

声明一个String类型的参数,并且String后面多了一个,这就是kotlin的可空类型的声明。checkNull根据传递参数返回null或name。

安全调用运算符:"?."

接着我们来看看如何运用这个可空变量,我们通过一个例子来欣赏下安全调用运算符的强大之处。

fun main() {
    val name: String? = null
    println(name?.length)
}

结果:null

kotlin却没有抛出空指针,而是返回了null,让我们来看看内部如何处理的:

只有当name不为空时,才会调用length()方法,name为空的时候,直接返回了null,这下再也不怕忘记处理空指针的情况了。

Elvis运算符:"?:"

在日常开发中我们也许会遇到这么一个情况,如果获取不到用户名,就按默认名称来显示。比如:

fun main() {
    val name: String? = null
    println(getName(name))
}

fun getName(str: String?): String? {
    return str ?: "Zhang San"
}

结果:Zhang San

当name为空时返回"Zhang San",当name不为空时直接返回name。我们来看看内部实现的原理,结合下图分析:

bar是用来代替默认值null的,如果foo==null,那么就直接返回bar,和java中string == null ? "--" : string;三元运算符作用类似。

非空断言:"!!"

kotlin还提供了一个运算符,如果你确定你的变量不可能为空,那么就可以使用!!来修饰你的变量,这种情况下,如果你的变量出现了null的情况,就会抛出空指针异常,我们来通过代码感受下:

fun main() {
    val name: String? = null
    println(name!!)
}

fun getName(str: String?): String? {
    return str ?: "Zhang San"
}

结果:

Exception in thread "main" kotlin.KotlinNullPointerException
	at FirstKotlinKt.main(FirstKotlin.kt:6)
	at FirstKotlinKt.main(FirstKotlin.kt)

Process finished with exit code 1

结束语:kotlin对开发者非常友好,有了可空类型,我们就不必对接口返回的数据进行冗余的非空判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alfred Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值