2017-08-05 30 views

回答

4

不同,大概就是這個意思是科特林沒有通配符相同的形式,因爲它們存在於Java的。相反,Kotlin使用不同的概念mixed-site variance,它增加了一個選項來指定聲明站點的變化,這是用Java通配符無法做到的。

至於星形投影,它實際上幾乎等同於無界的Java通配符。但是,至少有一個與Kotlin類型系統有關的差異。

當您有List<?>時,該類型對於Java而言是未知的,但是所有的Java參考類型都是可空的,因此您可以安全地將一個null作爲未知類型的參數傳遞。 list.add(null)

在科特林事實並非如此,明星投影MutableList<*>結合了out Any?in Nothing預測,而且你不能在所有的地方類型是未知的方法通過任何後者手段(Nothing是沒有價值的類型)。

同樣可以在出突出的說:雖然你可以通過一個null作爲Java界通配符類型? extends T,你不能做科特林out T投影相同。

和Java無界通配符的完全等效爲<in Nothing?>,因爲它可以讓你通過一個null作爲未知類型的參數(Nothing?Nothing∪{null},這是隻有null值的類型)。