Вы можете унаследовать тип A
от типа B
, но всякий раз, когда вы определяете тип A
, вы получите тип A?
(nullable on) бесплатно. Но где он лежит именно в иерархии типов? 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?
или любой тип, полученный из него. Можете ли вы вывести тип с нулевым значением с нулевым значением и что это будет означать?
Извините, если это что-то очевидное, я просто изучаю Котлин.
(@) для типов с нулевым значением оно должно быть x!!.foo()
.