NULL 操作
在Kotlin中一切都是对象
(甚至是Java中原始数据类型),一切都是可null的。所以,当然我们可以有一个可null的integer。
指定一个变量是可null是通过在类型的最后增加一个问号。
val a: Int? = null
一个可nul类型,你在没有进行检查之前你是不能直接使用它。
这个代码不能被编译:
val a: Int? = nulla.toString()var b: String? = "abc"val l = b.length //compilation error
检测null,对于可空引用,如果我们希望调用它的成员变量或者函数就必须先做检查,否则编译器会报错。
1 使用if
vala:Int?=null...if(a!=null){ a.toString()}
2 使用了安全访问操作符(?)。Elvis operator(?: )
只有这个变量不是null的时候才会去执行前面的那行代码。否则,它不会做任何事情。
val a: Int? = null...a?.toString()
使用Elvis operator (?: ):
val a:Int? = nullval myString = a?.toString() ?: ""val myString = a?.toString() ?: return falseval myString = a?.toString() ?: throw IllegalStateException()
3 使用!!操作符来强制编译器执行可null类型时跳过限制检查
代码将会被编译,但是很显然会奔溃。
val a: Int? = nulla!!.toString()
4 类型转换中使用null
我们知道类型转换可能产生ClassCastException异常,例如:
var a: Long = 1val aInt: Int? = a as Int // java.lang.ClassCastException
那么如何避免这个异常呢?改成下面形式就可以了。
var a: Long = 1val aInt: Int? = a as? Int
上面这种方法就是安全类型转换,如果类型转换不成功,就会返回null,而不是抛出ClassCastException异常。
null和Java库
Android SDK时,你可能看见所有Java方法的参数被标记为单个的!。Java中在一些获取对象的方法在Kotlin中显示返回Any!。这表示让开发者自己决定是否这个变量是否可null。 新版本的Android开始使用@Nullable和@NonNull注解来辨别参数是否可以是null或者否个函数是否可以返回null。
网友评论