首页 > 解决方案 > 嵌套安全调用 Null 检查 Kotlin

问题描述

我需要在 ImageView 中显示图像,所以我需要先确保图像 url 不为空。这3个选项有效吗?

答案数据类

data class Answer(
    val id: Long?,
    val title: String?,
    val answerImage: AnswerImage?
) {
    data class AnswerImage(
        val x0: AnswerImageData?,
        val x1: AnswerImageData?,
        val x2: AnswerImageData?
    ) {
        data class AnswerImageData(
            val id: String?,
            val url: String?
        )
    }
}

选项1

answer.answerImage?.let { answerImage ->
     answerImage.x0?.let { answerImageData ->
        answerImageData.url?.let {
             //display image
         }
      }
}

选项 2

if (answer.answerImage?.x0?.url != null)
{
   //display image
}

选项 3

answer.answerImage?.x0?.url?.let {
      //display image
}

标签: kotlin

解决方案


简短的回答:是的。

  • 选项 1:仅当您确实需要用它做更多事情而不是安全地施放它时,这才是一个不错的answerImage选择answerImageData。在这种特定情况下,我们没有必要明确声明这些变量。总结:在这种情况下,选项 1 不是一个非常简洁的解决方案,但它确实有效。

  • 选项 2:应该有效,因为所有属性都是不可变的。然后编译器可以在下一行(在if范围内)推断出该url属性仍然是 non- null

  • 选项 3:在我看来这是最好的一个:作为代码阅读器,这是最容易处理的,因为您通常会使用如下代码完成它:.let { safeUrl -> .. }.


推荐阅读