Ответ 1
Как насчет:
nullable?.toString() ?: ""
или, как сказал Александр Удалов:
nullable?.toString().orEmpty()
Какую оболочку можно использовать в методе расширения:
fun Any?.toStringOrEmpty() = this?.toString() ?: ""
Согласно официальной документации kotlin, вызов toString() нулевого объекта возвращает "нулевое" значение toString()
Я хочу, чтобы вместо toString() возвращалась пустая строка (""). Я реализовал это с помощью функции расширения.
fun Any?.toEmptyStringIfNull() :String {
if (this == null) {
return ""
} else {
return toString()
}
Мне интересно, если это может быть достигнуто проще/проще/чище и без вызова функции расширения каждый раз.
Как насчет:
nullable?.toString() ?: ""
или, как сказал Александр Удалов:
nullable?.toString().orEmpty()
Какую оболочку можно использовать в методе расширения:
fun Any?.toStringOrEmpty() = this?.toString() ?: ""
Вы можете напрямую использовать nullable.orEmpty()
.
Ссылка:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/or-empty.html
Я предлагаю функцию расширения stringify
, имя которой я позаимствовал из JavaScript JSON.stringify()
.
fun <T> T?.stringify(toString: (T) -> String = { it.toString() }): String =
if (this == null) "" else toString(this)
Это охватывает простой случай и случаи, когда вы хотите дополнительно обработать строку:
fun simplyConcatenate(s: String, postfix: String?): String =
s + postfix.stringify()
fun getFullTitle(title: String, disambiguation: String?): String =
title + disambiguation.stringify { " ($it)" }
fun demo() {
println(simplyConcatenate("a", null)) // "a"
println(simplyConcatenate("a", "b")) // "ab"
println(getFullTitle("a", null)) // "a"
println(getFullTitle("a", "b")) // "a (b)"
}