可空类型的层次结构中的地方是什么?
你可以从类型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)) }
我不明白为什么行(@)编译? 或换句话说,我不明白可空的类型层次,因为直到现在我虽然T
为Foo?
或从它派生的任何类型。 你可以从可为空的类型中获得不可空的类型,那么它会是什么意思?
对不起,如果这是明显的,我只是在学习Kotlin。
(@)为可空类型,它应该是x!!.foo()
。
这是编译器中的一个错误。 当T
有可空的上限时,你不应该能够调用T
的成员。 X?
是X
的超类型。