可空类型在类型层次结构中的位置是什么?
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))
}
我不明白为什么要编译第(@)行?或者换句话说,那时我不理解可空类型层次结构,因为直到现在我都认为 T
是 Foo?
或从它派生的任何类型。你能从可空类型派生出不可空类型吗?这意味着什么?
抱歉,如果这很明显,我只是在学习 Kotlin。
(@) 对于可空类型,它应该是 x!!.foo()
.
这是编译器中的错误。当 T
具有可为空的上限时,您不应该调用 T
的成员。 X?
是 X
的超类型。
您可以从类型 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
的超类型。