Just so you are not in the dark, here is a quick explanation of {co,contra,in}variance, taken from the introduction to [Altidor et al PLDI 2011](http://people.cs.umass.edu/~jaltidor/variance_pldi11.pdf).

"[T]he definition of generic class C<X> determines its variance. Depending on how the type parameter X is used, C can have one of four flavors of variance: it can be covariant, meaning that C<S> is a subtype of C<T> if S is a subtype of T; it can be contravariant, meaning that C<S> is a subtype of C<T> if T is a subtype of S; it can be bivariant, meaning that C<S> is always a subtype of C<T>; or it can be invariant, meaning that C<S> and C<T> are never subtype-related for different types T and S."