android - 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
为空则输出:
D/DEBUG: None
如果someStrFromServer
不为空则输出:
D/DEBUG: someStrFromServer
有谁知道,如果Kotlin
存在更有效和更短的方法来处理这个问题?也许,甚至更多,全球性的,比如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)
推荐阅读
- api - Wealthfront 与外部账户连接背后的技术
- python - 在 Python 中,我可以从另一个对象创建或继承一个对象,而不会丢失或覆盖旧对象中先前存在的属性吗?
- postgresql - 如何在 Postgress PGadmin 4 编辑器中设置变量?
- python - 如何在 unittest 和 pytest 中访问这些模拟
- sql - Snowflake 根据不同列值的组合返回记录一次
- c# - 正则表达式 - 获取冒号后的数字
- c# - 我的第二个表单没有显示,但是里面的代码被执行了
- ios - 从此特定 main.dart 中删除调试横幅
- javascript - GQL 解析器:返回 null
- animation - 我可以阻止人们按空格键切换到PowerPoint中的下一张幻灯片吗