Kotlin 申报地点差异
示例
声明站点差异可以被视为一次声明所有使用站点。
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<outT>,它是不可变的,因此T仅作为返回值类型出现;而Comparator<inT>,它仅T作为参数接收。