声明 - 站点差异

声明 - 站点差异可以被视为使用站点差异的声明一次性和所有使用站点。

  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 作为参数。