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

时间:2015-02-01 15:00:44

标签: generics inheritance nullable kotlin

您可以从类型A继承类型B,但无论何时定义类型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))
} 

我不明白为什么要编译line(@)?或者换句话说,我不理解可以为空的类型层次结构,因为直到现在我将T作为Foo?或从它派生的任何类型。你能从可空的那个派生出非可空类型吗?那么它会是什么意思?

对不起,如果这是显而易见的事情,我只是在学习Kotlin。

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

1 个答案:

答案 0 :(得分:2)

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