Kotlin的 String 类型是不可以为Null的。如果你需要它有值为 Null 的情况存在,需要使用 String? 类型。
下面这个函数,系统会提示 null 位置“Null can not be a value of a non-null type String”
fun getName():String{
return null
}
我们需要把它修改为下面这个样子才可以无报错
fun getName():String?{
return null
}
是的,在 String 后面加上一个 ? ,这样就允许字符串为 null 值了。
执行下面的代码,调用 getName()
val name:String = getName()?:return
println(name.length)
根据 genName() 返回值,最终打印返回值的长度或无输出。
如果确定代码不会为 null 值,可以使用 !! 来告诉编译器,这里不会为 null,从而让编译运行下去。
val string:String? = "Joel"
println(string!!.length)
当然,也可以把 !! 替换成 ?,这样也只会在不为 null 的时候输出 string 的长度。
而 kotlin 其实更加智能,它可以推断。
val string:String? = "Joel"
if(string != null)
println(string.length)
当这里在输出前,已经通过判断 string 不为 null 了,后面的输出就直接给结果就可以了。
这样真的很智能。赞一个!
类型安全
类在进行强制转换的时候,有可能失败。kotlin可以不抛出异常,而使用 null 来给出结果。
比如一个父子类
open class Parent(){
val name:String? = "joel"
}
class Child():Parent(){
}
val parent:Parent = Parent()
val child:Child? = parent as? Child
println(child)
println(child?.name)
在 child 允许 null,parent 强制转换 Child,如果失败就把 null 赋值给 child。