Genéricos, matrices y ClassCastException

Creo que debe haber algo sutil pasando aquí que no sé. Considera lo siguiente:

public class Foo<T> {
  private T[] a = (T[]) new Object[5];

  public Foo() {
    // Add some elements to a
  }

  public T[] getA() {
    return a;
  }
}

Suponga que su método principal contiene lo siguiente:

Foo<Double> f = new Foo<Double>();
Double[] d = f.getA();

Obtendrás unCastClassException con el mensajejava.lang.Object No puede ser enviado ajava.lang.Double.

puede alguien decirme por que? Mi comprensión deClassCastException es que se lanza cuando intentas lanzar un objeto a un tipo que no se puede lanzar. Es decir, para una subclase de la cual no es una instancia (para citar la documentación). p.ej.:

Object o = new Double(3.);
Double d = (Double) o; // Working cast
String s = (String) o; // ClassCastException

Y parece que puedo hacer esto. Sia era solo unT en lugar de una matrizT[], nosotros podemos obtenera y lanzarlo sin problema. ¿Por qué las matrices rompen esto?

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta