可空类型的层次结构中的地方是什么?

你可以从类型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的超类型。