阅读完需:约 2 分钟
要使用可空类型,可以选择使用智能强制转换。 智能转换是Kotlin编译器跟踪if
表达式内部条件的功能。 如果编译器发现变量可null
类型的null
值,则编译器将允许访问此变量。
尝试在没有安全转换的情况下访问可空类型的String
时,它将生成编译错误。
var string: String? = "Hello!"
print(string.length) // Compile error
要解决上述表达式,使用安全转换为:
fun main(args: Array<String>){
var string: String? = "Hello!"
if(string != null) { // smart cast
print(string.length) // It works now!
}
}
使用is来智能转换
当使用is
或!is
来检查变量时,编译器会跟踪此信息并在内部将变量转换为目标类型。 如果is
或!is
返回true
,则在范围内完成。
在kotlin 中 is 等同于 java 中的 instanceof ,而 as 等同于 java 中的 强制转换。
因为前面的 is 已经将类型转换了,所以在kotlin 中就不需要将 类型再一次的进行强转,所以可以更加的简化取消了 as 的强转。
在 kotlin 中自动转换的类型是不同的,如果是局部的变量,在进行判断的时候是可以进行一个短暂的类型转换。
之所以不支持类型转换是因为这一次的变量是定义在外面的,是一个全局的变量