Generics, Arrays und die ClassCastException

Ich denke, hier muss etwas Feines los sein, von dem ich nichts weiß. Folgendes berücksichtigen

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

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

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

Angenommen, Ihre Hauptmethode enthält Folgendes:

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

ie erhalten einCastClassException mit der Nachrichtjava.lang.Object kann nicht in @ umgewandelt werdjava.lang.Double.

ann mir jemand sagen warum? Mein Verständnis vonClassCastException wird ausgelöst, wenn Sie versuchen, ein Objekt in einen Typ umzuwandeln, der nicht umgewandelt werden kann. Das heißt, für eine Unterklasse, für die es sich nicht um eine Instanz handelt (um die Dokumentation zu zitieren). z.B.

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

Und es scheint, dass ich das schaffen kann. Wenna war nur einT anstelle eines ArraysT[], wir können bekommena und wirf es ohne Probleme. Warum brechen Arrays dies?

Vielen Dank

Antworten auf die Frage(6)

Ihre Antwort auf die Frage