Generics, arrays und classcastexception-Fehler

Ich denke, es muss etwas subtiler hier Los ist, weiß ich nicht. Betrachten Sie das folgende:

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

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

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

Nehme an, dass deine main-Methode enthält die folgenden:

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

Erhalten Sie eine CastClassException mit der Meldung java.lang.Object kann nicht gewirkt werden, um java.lang.Double.

Kann mir jemand sagen warum? Mein Verständnis von ClassCastException ist, dass es ausgelöst, wenn Sie versuchen zu casten eines Objekts zu einem Typ, der nicht gegossen werden. Das heißt, eine Unterklasse von denen es keine Instanz (Zitat der Dokumentation). z.B.:

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

Und es scheint, dass ich dies tun kann. Wenn a war nur ein T anstelle einer array - T[] können wir a und warf es, ohne ein problem. Warum arrays brechen?

Dank.

Ich gehe davon aus das ist alles, denn Sie können nicht erstellen Sie generische arrays. Haben Sie sich überlegt mit einer ArrayList<T> statt?

InformationsquelleAutor ntownsend | 2008-12-16

Schreibe einen Kommentar