Welcome everyone

Kotlin 如何规避NPE

Kotlin 汪明鑫 232浏览 0评论

先上代码

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

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz