有没有更好的方式来写在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) } // ...