可空类型在类型层次结构中的位置是什么?

What is the place in type hierarchy of nullable types?

您可以从类型 B 继承类型 A,但是只要您定义类型 A,您将免费获得类型 A?(可空)。但它究竟位于类型层次结构中的什么位置? A? 继承自 A 还是其他方式?

我问这个是因为我对这样的代码感到困惑:

open class Foo {
  fun foo() : Int {
    return 0;
  }
}

fun test<T : Foo?>(x:T) : Int {
  return x.foo() // (@)
}

fun main(args: Array<String>) {
  println(test<Foo?>(null))
} 

我不明白为什么要编译第(@)行?或者换句话说,那时我不理解可空类型层次结构,因为直到现在我都认为 TFoo? 或从它派生的任何类型。你能从可空类型派生出不可空类型吗?这意味着什么?

抱歉,如果这很明显,我只是在学习 Kotlin。

(@) 对于可空类型,它应该是 x!!.foo().

这是编译器中的错误。当 T 具有可为空的上限时,您不应该调用 T 的成员。 X?X 的超类型。