1

给定代码

fun main(args: Array<String>) {
    val someText: String? = null
    println(someText.toString())
}

运行时,输出为

null

出现两个问题:

  • 是否可以实现自定义空安全方法并回退到某些默认代码(例如,我认为 toString 可以)
  • 为什么不抛出异常?
4

1 回答 1

2

文档

fun Any?.toString(): String

返回对象的字符串表示形式。可以使用 null 接收器调用,在这种情况下,它返回字符串“null”。

您可以通过编写扩展函数来实现类似的行为。例如:

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"
}

活生生的例子。

于 2018-03-12T14:43:53.723 回答