See 4856545 (add variance to the generic type system) for background.
We would like to have typesafe versions of arrays, in which store
checks cannot fail. This would allow arrays to be used with generic
types. Without typesafe arrays, arrays of generic types are not allowed.
This is necessary for type soundness: because generics are implemented
using erasure, the VM cannot fully check array stores.
See also http://www.daimi.au.dk/~plesner/variance/
Other alterative syntaxes are worth considering, for example
Array<T>
and the wildcard syntax for covariant (readonly) typesafe
arrays.