Android Kotlin智能操作员超载



如果过载某些Kotlin操作员并以此方式使用它怎么办:

// Inits somewhere before usage.
val someStrFromServer: String? 
lateinit var myFieldText: TextView
override fun onStart() {
    super.onStart()
    myFieldText.text = someStrFromServer / R.string.app_none
}

操作员超载:

operator fun String?.div(resId: Int): String {
    return if (this.isNullOrBlank()) {
        context.getString(resId)
    } else {
        this
    }
} 

输出如果 someStrFromServer null:

D/DEBUG: None

输出如果 someStrFromServer 不是null:

D/DEBUG: someStrFromServer

是否有人知道,如果Kotlin存在更有效,更短的处理方法?也许更多, global ,例如 extension function

您可以做到这一点,但是它不是很直观,因为div通常仅在数学计算中使用。我建议使用

之类的东西
someStrFromServer.takeUnless { it.isNullOrBlank()} ?: context.getString(resId)

或通过扩展简化

fun String?.fallback(resId: Int) = takeUnless { it.isNullOrBlank()} ?: context.getString(resId)

这样使用:

myFieldText.text = someStrFromServer.fallback(R.string.app_none)

最新更新