gpt4 book ai didi

kotlin - 在 Nothing 上调用任何方法

转载 作者:行者123 更新时间:2023-12-02 13:06:36 24 4
gpt4 key购买 nike

尽管它 is not explicitly stated Nothing 是所有类型的子类型,这(除其他外)表明:

fun f(x:Float) { }
fun g(x:Char) { }

fun dead(q: Nothing) {
f(q)
g(q)
}

但是,这会失败并显示“未解析的引用”:

fun dead(q: Nothing) {
q.not()
}

这是错误还是功能?

注意事项:

  1. 第一段代码编译(有警告),第二段不编译
  2. 可以使用 Nothing 类型的接收器,例如调用 toString()
  3. 这是合法的:{b:Boolean -> b.not()}(q)
  4. 也向上转换:(q as Boolean).not()
  5. Equivalent question斯卡拉

最佳答案

NothingNothing 是有原因的。您不能在其上调用任何函数。此外 not() 仅适用于 Boolean,因此它不存在于 Nothing 中。事实上 Nothing 上没有方法:

/**
* Nothing has no instances. You can use Nothing to represent "a value that never exists": for example,
* if a function has the return type of Nothing, it means that it never returns (always throws an exception).
*/
public class Nothing private constructor()

文档几乎解释了它的存在。

虽然有一个漏洞。如果您从函数返回 Nothing? 会怎样?

fun dead(): Nothing? {
return null
}

没错。它只能返回null:

@JvmStatic
fun main(args: Array<String>) {
dead() // will be null
}

我不会说有一个有效的用例可以做到这一点,但这是可能的。

Nothing 表示树中没有内容的示例:

sealed class Tree<out T>() {
data class Node<out T>(val value: T,
val left: Tree<T> = None,
val right: Tree<T> = None): Tree<T>()
object None: Tree<Nothing>()
}

这里的Nothing表示没有子节点的叶节点。

关于kotlin - 在 Nothing 上调用任何方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com