声明 - 站点差异
声明 - 站点差异可以被视为使用站点差异的声明一次性和所有使用站点。
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
作为参数。