Каков наилучший способ в kotlin для метода null object toString() возвращать пустую строку вместо "null"

Согласно официальной документации kotlin, вызов toString() нулевого объекта возвращает "нулевое" значение toString()

Я хочу, чтобы вместо toString() возвращалась пустая строка (""). Я реализовал это с помощью функции расширения.

fun Any?.toEmptyStringIfNull() :String {
if (this == null) {
    return ""
} else {
    return toString()
}

Мне интересно, если это может быть достигнуто проще/проще/чище и без вызова функции расширения каждый раз.

Ответ 1

Как насчет:

nullable?.toString() ?: ""

или, как сказал Александр Удалов:

nullable?.toString().orEmpty()

Какую оболочку можно использовать в методе расширения:

fun Any?.toStringOrEmpty() = this?.toString() ?: ""

Ответ 3

Я предлагаю функцию расширения 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)"
}