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()
        }
    }
}

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

4

2 回答 2

5

您可以使用应用:

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"
        }
    }
}
于 2017-04-07T08:47:18.407 回答
3

这个:

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 运算符返回它,否则返回右边的表达式。

于 2017-04-07T08:37:57.633 回答