kotlin中学习笔记——null

来源:互联网 发布:手机淘宝抢购页面刷新 编辑:程序博客网 时间:2024/05/01 11:10

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


指定一个变量可null是通过在它的类型后面加?号,如
val a: String? = null
(注意这个Int也可为空是因为在kotlin中一切都是对象,包括在java中的基本类型)

一个可null类型,没有进行检查前不能使用,如下代码会编译出错
val a: String? = nulla.subString(2)


kotlin另外一个特性是当我们检查了一个可null类型,这个对象会自动转型成不可null类型,这就是Kotlin编译器的智能转换,如
val a: String? = nullif(a != null){     a.subString(2)}
在if语句中,a从Int?变成了Int,所以可以直接使用。但是在if代码外,则需要重新检查。
当然这仅仅在变量当前不能被改变的前提下,如果变量可能被另外线程改变就会变得复杂。
如果我们处处去做判断,代码会臃肿起来,kotlin中有更简洁的处理方式,如:
val a: String? = nulla?.subString()
我们使用安全访问符"?",只有当不为null的时候才执行这行代码。否则不会做任何事情。
但是注意如果有赋值行为的话,a为null的话会返回null,如:
val a: String? = nullval s = a?.subString()
s会被赋值为null

kotlin中还有一种_Elvis operator_(?:)操作符,使用如下:
val a: String? = nullval s = a?.subString(2) ?: ""val s = a?.subString(2) ?: return falseval s = a?.subString(2) ?: throw IllegalStateException()
在kotlin中return和throw都是表达式,所以可以用在_Elvis operator_操作符右边

当我们确定一个非null变量不为null,我们可以使用"!!"来强制跳过检查正常编译,如:
val a: String? = nulla!!.subString(2)
当然不推荐经常使用,因为是未经检验的存在null指针崩溃的可能。

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