Почему toString не генерирует исключение при вызове нулевого значения в Kotlin?
Учитывая код
fun main(args: Array<String>) {
val someText: String? = null
println(someText.toString())
}
При запуске вывод
null
Появляются два вопроса:
- возможно ли реализовать собственный нулевой безопасный метод с отступлением к некоторому коду по умолчанию (как, я думаю, toString делает)
- почему не исключение не выбрасывается?
1 ответ
Решение
Из документов:
fun Any?.toString(): String
Возвращает строковое представление объекта. Может вызываться с нулевым получателем, и в этом случае он возвращает строку "нулевой".
Вы можете добиться аналогичного поведения, написав функцию расширения. Например:
fun Any?.foo() = println(this ?: "Sadly, this is null")
fun main(args: Array<String>) {
val x: Int? = null
val y: Int? = 3
x.foo() // "Sadly, this is null"
y.foo() // "3"
null.foo() // "Sadly, this is null"
}