先上代码
package pers.wmx.springbootfreemarkerdemo.kotlin
//Kotlin 如何规避NPE
fun main(args:Array<String>){
// var a: String = "abc" //不允许为空
// a = null
//
//
// var b: String? = null //允许为空
// a = b
var c: String? = "xinye"
// var l = c.length
val l = if (c != null) c.length else -1
//等效于下面
c = null
val length1 = c?.length //返回依然是一个可选型
println(length1) //输出null
//KotlinNullPointerException
// println(c!!.toInt()) !!强制调用 NPE
// 【谨慎使用!!】
// Kotlin 还提供了一个强转的操作符 !!,这个操作符能够强行调用变量的方法或者属性,而不管这个变量是否为空,
// 如果这个时候该变量为空时,那么就会发生 NPE。所以如果不想继续陷入 NPE 的困境无法自拔,请不要该操作符走的太近。
//为空给默认值
val length2 = c?.length?: -1 // 等价于 if (c != null) c.length else -1
println(length2) //输出-1
//?: 后面添加任何表达式,比如你可以在后面会用 return 和 throw
//不要在整一大堆判空逻辑,一个?搞定
}
kotlin通过编译时期对可选类型(是否允许为空)的校验,规避了npe
错误的使用直接会编译失败
? 代替了 if 的判空
这就是kotlin的安全性所在
转载请注明:汪明鑫的个人博客 » Kotlin 如何规避NPE
说点什么
您将是第一位评论人!