Kotlin学习笔记

kotlin中学习笔记——null

2017-09-29  本文已影响15人  chzphoenix

Kotlin学习笔记系列:http://blog.csdn.net/column/details/16696.html

指定一个变量可null是通过在它的类型后面加?号,如

val a: String? = null  

(注意这个Int也可为空是因为在kotlin中一切都是对象,包括在java中的基本类型)

一个可null类型,没有进行检查前不能使用,如下代码会编译出错

val a: String? = null  
a.subString(2)  

kotlin另外一个特性是当我们检查了一个可null类型,这个对象会自动转型成不可null类型,这就是Kotlin编译器的智能转换,如

val a: String? = null  
if(a != null){  
     a.subString(2)  
}  

在if语句中,a从Int?变成了Int,所以可以直接使用。但是在if代码外,则需要重新检查。
当然这仅仅在变量当前不能被改变的前提下,如果变量可能被另外线程改变就会变得复杂。
如果我们处处去做判断,代码会臃肿起来,kotlin中有更简洁的处理方式,如:

val a: String? = null  
a?.subString()  

我们使用安全访问符"?",只有当不为null的时候才执行这行代码。否则不会做任何事情。
但是注意如果有赋值行为的话,a为null的话会返回null,如:

val a: String? = null  
val s = a?.subString()  

s会被赋值为null

kotlin中还有一种Elvis operator(?:)操作符,使用如下:

val a: String? = null  
val s = a?.subString(2) ?: ""  
val s = a?.subString(2) ?: return false  
val s = a?.subString(2) ?: throw IllegalStateException()  

在kotlin中return和throw都是表达式,所以可以用在Elvis operator操作符右边

当我们确定一个非null变量不为null,我们可以使用"!!"来强制跳过检查正常编译,如:

val a: String? = null  
a!!.subString(2)  

当然不推荐经常使用,因为是未经检验的存在null指针崩溃的可能。

在android新版本中,我们可以用@Nullable和@NotNull注解来辨别参数是否可以为空或者函数返回是否可以为空。

上一篇 下一篇

猜你喜欢

热点阅读