宣告 - 站點差異

宣告 - 站點差異可以被視為使用站點差異的宣告一次性和所有使用站點。

  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 作為引數。