[英]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.