如何为 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?.

这一事实