Wenn Sie eine Laufzeitausnahme erhalten, bedeutet dies, dass die Objekte, die Sie zu übertragen versucht haben, diesen Typ nicht haben. Die Sprache hat damit nichts zu tun. Es ist wahrscheinlich ein Fehler in Ihrem Code.
Edit: Es klingt wie Sie verwirrt sind, wie Java-Typ-System funktioniert. In C# repräsentieren Generika tatsächlich zur Laufzeit verschiedene Typen. In Java existieren generische Typen zur Laufzeit nicht. Sie sind nur eine Annehmlichkeit, um eine bessere Prüfung der Kompilierungszeit zu ermöglichen. Während der Kompilierung werden Generika in einem Prozess, der als Typlöschung bezeichnet wird, durch einen echten Typ ersetzt.
Normalerweise ist das Löschen eines generischen Typs Object
, aber da Sie eine obere Grenze für T
angegeben haben, wird es in diese gebundene Comparable
konvertiert. Daher sieht Ihr Code nach dem Löschen so aus.
Comparable[] aux = (Comparable[]) new Object[xs.length];
In anderen Worten, Sie sind ein Array vom Typ Object[]
erstellen und sofort versucht, es zu werfen Comparable[]
zu geben. Da Object
Comparable
nicht implementiert, sind die Typen inkompatibel, daher erhalten Sie eine Laufzeitausnahme. Sie können dies beheben, indem Sie stattdessen ein Array von Comparable
s erstellen.
Ich glaube, Sie sollten sehen, http://stackoverflow.com/questions/1817524/generic-arrays-in-java es sehr interessant ist. –