宣告 - 站點差異
宣告 - 站點差異可以被視為使用站點差異的宣告一次性和所有使用站點。
class Consumer<in T> { fun consume(t: T) { ... } }
fun charSequencesConsumer() : Consumer<CharSequence>() = ...
val stringConsumer : Consumer<String> = charSequenceConsumer() // OK since in-projection
val anyConsumer : Consumer<Any> = charSequenceConsumer() // Error, Any cannot be passed
val outConsumer : Consumer<out CharSequence> = ... // Error, T is `in`-parameter
宣告 - 站點方差的廣泛示例是 List<out T>
,它是不可變的,因此 T
僅作為返回值型別出現,而 Comparator<in T>
僅接收 T
作為引數。