Genéricos, matrizes e ClassCastException

Eu acho que deve haver algo sutil acontecendo aqui que eu não conheço. Considere o seguinte:

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

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

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

Suponha que seu método principal contenha o seguinte:

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

Você receberá umCastClassException com a mensagemjava.lang.Object não pode ser convertido parajava.lang.Double.

Alguém pode me dizer o porquê? Meu entendimento deClassCastException é que ele é lançado quando você tenta converter um objeto em um tipo que não pode ser convertido. Ou seja, para uma subclasse da qual não é uma instância (para citar a documentação). por exemplo.:

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

E parece que posso fazer isso. E sea era apenas umT em vez de uma matrizT[], podemos pegara e jogue sem problemas. Por que matrizes quebram isso?

Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion