で、covarianceの意味だがここで言われてる文脈では ある型AとBとパラメータ型Tについて、 A <: B => T<A> <: T<B> ( A <: B は AがBのサブタイプであるという意味) が成立するとき、Tはcovariantであると言う。 で、Javaの配列に関して考えてみると A <: B => A[] <: B[] がJava言語仕様で決まっているからJavaの配列はcovariantなわけだ 一方、Java Genericsでは上記の命題が成立しないのでJava Genericsの Generic型はcovriantでは無いというわけ