声明站点差异可以被视为一次声明所有使用站点。
class Consumer<in T> { fun consume(t: T) { ... } } fun charSequencesConsumer() : Consumer<CharSequence>() = ... val stringConsumer : Consumer<String> = charSequenceConsumer() // 投影以来还可以 val anyConsumer : Consumer<Any> = charSequenceConsumer() // 错误,任何都无法通过 val outConsumer : Consumer<out CharSequence> = ... // 错误,T为in参数
声明位置方差的广泛示例是List<out T>,它是不可变的,因此T仅作为返回值类型出现;而Comparator<in T>,它仅T作为参数接收。