プログラミング言語 Scala Wiki 8.2 Variance Annotations
とても勉強になる。
翻訳してくださった方、ありがとうございます。
Scalaの公式サイトのドキュメント、どこに何が書いてあるかまだイマイチわからないから。。
Varianceは共変ってことなんだけど、ジェネリックと共変は関連が強い概念。
Javaでも共変戻り値が可能になったのはたしかジェネリクスが導入されたJava 5からじゃなかったっけ。
Scalaには共変と、逆の反変もある。
記法は+が共変で-が反変。A[+S]とかA[-S]とか。
もちろんScalaにも上限境界と下限境界がある。
A[S <: U]、A[S >: L]みたいな書き方。
ちなみに。
A[B[S], C[S]]
と
A[B[_], C[_]]
は同じ意味。