簡體   English   中英

之間的區別<out any?>和 &lt;*&gt; 在 generics 在 kotlin</out>

[英]Difference between <out Any?> and <*> in generics in kotlin

我不明白 generics 中<out Any?><*>之間的區別。 我知道使用<*>就像同時執行<out Any?><in Nothing> ,但是使用<out Any?>會導致相同的結果。

主要區別在於您不能使用out Any? 在聲明為逆變的類型參數上進行投影(在聲明站點帶有in )——它的所有使用站點也必須顯式或隱式地in投影。

此外,對於具有上限T: TUpper的類型參數,您不能使用帶有不是out子類型的類型參數的外TUpper 例如,如果將類型聲明為Foo<T: Number> ,則投影Foo<out Any?>無效。 Foo<*>的情況下,星投影的out部分表示上限,而不是Any? .

無界

對於泛型 *投影與
Invariant<T> Invariant<out Any?>Invariant<in Nothing>
Covariant<out T> Covariant<out Any?>
Contravariant<in T> Contravariant<in Nothing>

有界

對於泛型 *投影與
Invariant<T: SomeType> Invariant<SomeType>Invariant<in Nothing>
Covariant<out T: SomeType> Covariant<out SomeType>
Contravariant<in SomeType: T> 不支持下限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM