如果重载某些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
为空,则输出:
D/DEBUG: None
someStrFromServer
不为空时的输出:
D/DEBUG: someStrFromServer
有人知道,Kotlin
中是否存在一种更有效,更短的方式来处理此问题?也许甚至更多,像extension function
这样的 global 。
答案 0 :(得分:2)
您可以这样做,但这不是很直观,因为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)