有没有更好的方法在kotlin写这个?

时间:2018-01-13 22:36:03

标签: kotlin nullable

这是我目前的代码:

private val EXTRA_IS_REFRESHING = "IS_REFRESHING"
private var isRefreshing: Boolean = false

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    isRefreshing = if (savedInstanceState != null)        
        savedInstanceState!!.getBoolean(EXTRA_IS_REFRESHING, false) 
        else false
}

Kotlin有没有更好的方法来写最后一行?

3 个答案:

答案 0 :(得分:3)

其中一种方法是检查可空表达式的结果是否等于true

isRefreshing = savedInstanceState?.getBoolean(EXTRA_IS_REFRESHING, false) == true

或者它可能是 elvis 运营商:

isRefreshing = savedInstanceState?.getBoolean(EXTRA_IS_REFRESHING, false) ?: false

至于我,第一段代码显示意图更好,所以我更喜欢它。

答案 1 :(得分:1)

在这种情况下,您可以完全删除if并将isRefreshing分配给条件表达式。此外,正如@ s1m0nw1所述,智能投射不再需要!!?.

isRefreshing = savedInstanceState != null && 
               savedInstanceState.getBoolean(EXTRA_IS_REFRESHING, false)

答案 2 :(得分:0)

通常你会将多个东西放入已保存状态。在那种情况下,我使用这个:

if (savedInstanceState != null) {
    // savedInstanceState is inferred non-null at this point, so no !!.
    isRefreshing = savedInstanceState.getBoolean(EXTRA_IS_REFRESHING, isRefreshing)
} else {
    // First start.
}

但那很无聊。既然我们在Kotlin,我也可以想象:

savedInstanceState?.apply {
    isRefreshing = getBoolean(EXTRA_IS_REFRESHING, isRefreshing)
} ?: run {
    // First start.
}

savedInstanceState?.also {
    isRefreshing = it.getBoolean(EXTRA_IS_REFRESHING, isRefreshing)
} // ...