为什么';在Kotlin中调用null值时,t toString是否引发异常?

为什么';在Kotlin中调用null值时,t toString是否引发异常?,kotlin,kotlin-null-safety,Kotlin,Kotlin Null Safety,给定代码 fun main(args: Array<String>) { val someText: String? = null println(someText.toString()) } 出现两个问题: 这是否可能实现自定义空安全方法,并回退到某些默认代码(比如,我认为toString) 为什么没有抛出异常 来自: 返回对象的字符串表示形式。可以使用空接收器调用,在这种情况下,它返回字符串“null” 您可以通过编写一个脚本来实现类似的行为。例如: fun

给定代码

fun main(args: Array<String>) {
    val someText: String? = null
    println(someText.toString())
}
出现两个问题:

  • 这是否可能实现自定义空安全方法,并回退到某些默认代码(比如,我认为toString)
  • 为什么没有抛出异常
来自:

返回对象的字符串表示形式。可以使用空接收器调用,在这种情况下,它返回字符串“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"
}
fun Any?.foo()=println(这?:“很遗憾,这是空的”)
趣味主线(args:Array){
val x:Int?=null
val y:Int?=3
x、 foo()/“很遗憾,这是空的”
y、 foo()/“3”
null.foo()/“很遗憾,这是null”
}

好的,但是第二个问题呢?有可能吗?有趣的扩展。。。在任何可为null的对象上调用
foo()
,不必首先断言notnull或
?.foo()
?@robinjonson-确实如此。我编辑了我的答案,以包含一个更完整的示例。
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"
}