如果过载某些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)