如何为 null 重载运算符?
How to overload operator for null?
我想为 null
文字重载像 invoke
这样的运算符。
例如,我可以这样写
null(1, 2)
可能吗?
我不建议在 null
文字上重载任何内容,因为它会造成太多混乱并且没有 real-world 用例。
但是,从技术上讲,这是可能的:
operator fun Nothing?.invoke() = "hi!"
fun main() {
println(null()) // Works, prints "hi!"
val x = null
println(x()) // Also works.
val y: String? = null
//println(y()) // compilation error
val z: String = ""
//println(z()) // also compilation error
}
它利用了 null
关键字具有可空类型 Nothing?
.
这一事实
我想为 null
文字重载像 invoke
这样的运算符。
例如,我可以这样写
null(1, 2)
可能吗?
我不建议在 null
文字上重载任何内容,因为它会造成太多混乱并且没有 real-world 用例。
但是,从技术上讲,这是可能的:
operator fun Nothing?.invoke() = "hi!"
fun main() {
println(null()) // Works, prints "hi!"
val x = null
println(x()) // Also works.
val y: String? = null
//println(y()) // compilation error
val z: String = ""
//println(z()) // also compilation error
}
它利用了 null
关键字具有可空类型 Nothing?
.