您可以从类型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()
。
答案 0 :(得分:2)
这是编译器中的错误。当T
具有可为空的上限时,您应该无法调用T
的成员。 X?
是X
的超类型。