有没有更好的方式来写在kotlin?

这是我现在的代码:

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有没有更好的方法来写最后一行?

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

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

或者可能是elvis运营商:

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

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

你可以在这种情况下完全删除if ,并将条件expression式赋值给isRefreshing 。 另外,正如@ s1m0nw1所提到的那样,smart-casting不需要!!?.

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

通常你把不止一件事情保存起来。 在这种情况下,我使用这个:

 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) } // ...