Обобщения, массивы и исключение ClassCastException

Я думаю, что здесь должно быть что-то тонкое, о чем я не знаю. Учтите следующее:

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

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

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

Предположим, что ваш основной метод содержит следующее:

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

Вы получитеCastClassException с сообщениемjava.lang.Object не может быть приведен кjava.lang.Double.

Кто-нибудь может сказать мне, почему? Мое пониманиеClassCastException заключается в том, что он выбрасывается при попытке привести объект к типу, который не может быть приведен. То есть для подкласса, экземпляром которого он не является (цитируя документацию). например.:

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

И, кажется, я могу это сделать. Еслиa был простоT вместо массиваT[], мы можем получитьa и бросить его без проблем. Почему массивы ломают это?

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос