2017-08-08 216 views
2

從Java類繼承的Kotlin類是否也繼承自Any?從Java類繼承的Kotlin類是否也從Any繼承?

如果我們有一個Java類Foo和一個繼承自Foo的Kotlin類Bar,並且我們試圖在Kotlin的MutableList中使用它,那麼下面的工作應該如何?

class Class(items: MutableList<Bar> = mutableListOf()) { 
    var items: MutableList<Any> = items 
} 
+0

我不知道很多關於科特林呢,但我們知道,Java是一般*不變*當談到這一點,赫然如果我正確閱讀[本文](https://proandroiddev.com/understanding-generics-and-variance-in-kotlin-714c14564c470),請了解這*應該是可能的。我對這一發現不夠信心,並將其列爲答案,但這至少會給你帶來很大的好處。 – Makoto

回答

5

是的。 Anymapped type,它對應於java.lang.Object(它是所有Java類的超類型),所以基本上每個Java類都可以從Kotlin看作是Any的子類型。只要something非空,something is Any檢查總是適用於Kotlin和Java類型。

其實,Any由JVM平臺上java.lang.Object表示:

println(Any::class.qualifiedName) // kotlin.Any 
println(Any::class.jvmName)  // java.lang.Object