为什么';在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)
- 为什么没有抛出异常李>
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"
}