官术网_书友最值得收藏!

Safe call

The safe call operator is simply a question mark followed by a dot. It's important to understand that the safe cast operator will always return a value. If the left-hand side of the operator is null, then it will return null, otherwise it will return the result of the right-hand side expression:

    override fun onCreate(savedInstanceState: Bundle?) { 
         super.onCreate(savedInstanceState) 
         val locked: Boolean? = savedInstanceState?.getBoolean("locked") 
    } 

If savedInstanceState is null, then null will be returned, otherwise the result of evaluating a savedInstanceState?.getBoolean("locked") expression will be returned. Keep in mind that a nullable reference call always returns nullable, so the result of the whole expression is a nullable Boolean?. If we want to make sure we will get non-nullable Boolean, we can combine the safe call operator with the elvis operator discussed in the next section.

Multiple calls to the save call operator can be chained together to avoid a nested if expression or complex conditions like this:

    //Java idiomatic - multiple checks
    val quiz: Quiz = Quiz()
    //...
    val correct: Boolean?
 
    if(quiz.currentQuestion != null) {
        if(quiz.currentQuestion.answer != null ) {
            //do something
        }
    }
  
    //Kotlin idiomatic - multiple calls of save call operator 
    val quiz: Quiz = Quiz() 

//...
val correct = quiz.currentQuestion?.answer?.correct
// Inferred type Boolean?

The preceding chain works like this: -correct will be accessed only if the answer value is not null and answer is accessed only if the currentQuestion value is not null. As a result, the expression will return the value returned by correct property or null if any object in the safe call chain is null.

主站蜘蛛池模板: 垫江县| 宜兴市| 临漳县| 蒲城县| 闸北区| 寻甸| 三亚市| 鹤庆县| 绥滨县| 蓬莱市| 曲松县| 沾化县| 阿图什市| 洛川县| 平谷区| 富阳市| 顺昌县| 泽州县| 大港区| 襄垣县| 鄂托克旗| 富锦市| 鄂托克前旗| 新郑市| 信丰县| 凯里市| 宾阳县| 云梦县| 托里县| 安庆市| 手游| 枣阳市| 左权县| 舟曲县| 周至县| 双辽市| 万山特区| 沙坪坝区| 舟山市| 大英县| 保定市|