首页 文章

Kotlin对类属性的null安全性

提问于
浏览
4

如何避免将 !! 用于类的可选属性

class PostDetailsActivity {

    private var post: Post? = null

    fun test() {
        if (post != null) {
            postDetailsTitle.text = post.title    // Error I have to still force using post!!.title
            postDetailsTitle.author = post.author

            Glide.with(this).load(post.featuredImage).into(postDetailsImage)

        } else {
            postDetailsTitle.text = "No title"
            postDetailsTitle.author = "Unknown author"

            Toast.makeText(this, resources.getText(R.string.post_error), Toast.LENGTH_LONG).show()
        }
    }
}

我应该创建一个局部变量吗?我认为使用 !! 不是一个好习惯

2 回答

  • 3

    您可以使用申请:

    fun test() {
        post.apply {
            if (this != null) {
                postDetailsTitle.text = title
            } else {
                postDetailsTitle.text = "No title"
            }
        }
    }
    

    或者:

    fun test() {
        with(post) {
            if (this != null) {
                postDetailsTitle.text = title
            } else {
                postDetailsTitle.text = "No title"
            }
        }
    }
    
  • 5

    这个:

    if (post != null) {
        postDetailsTitle.text = post.title    // Error I have to still force using post!!.title
    } else {
        postDetailsTitle.text = "No title"
    }
    

    可以替换为:

    postDetailsTitle.text = post?.title ?: "No title"
    

    如果?:左边的表达式不为null,则elvis运算符返回它,否则返回右边的表达式 .

相关问题