G
Guest
Gast
Hi!
Ich habe eine Klasse geschrieben, welche dank Generics zwei Arrays gleichen Typs- aber egal welchen Typs- zusammenführen kann. Leider funktioniert es jedoch noch nicht richtig, da ich einen Cast-Fehler bekomme.
Die Array-Zusammenführ-Klasse sieht so aus:
Eine Anwendung sieht beispielsweise so aus:
Dabei entsteht jedoch diese Fehlermeldung:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lvoccoach.VocFile;
Wenn ich jedoch versuche, ArrayJoiner mit einem VocFile-Array zu typisieren...
...kommt eine andere Fehlermeldung:
joinArray(voccoach.VocFile[][],voccoach.VocFile[][]) in voccoach.ArrayJoiner<voccoach.VocFile[]> cannot be applied to (voccoach.VocFile[],voccoach.VocFile[]).
Außerdem sollte doch auch gar kein Object-Array zurückgegeben werden, wenn ich Generics verwende?!
Die Deklaration in joinArray kann ich aber ja nicht auf ein Nicht-Array ändern, da ich sonst nicht auf die length-Methode zugreifen kann.
ist auch nicht möglich.
Auch ein nachträgliches Casten funktioniert nicht:
Was kann ich tun?
Ich habe eine Klasse geschrieben, welche dank Generics zwei Arrays gleichen Typs- aber egal welchen Typs- zusammenführen kann. Leider funktioniert es jedoch noch nicht richtig, da ich einen Cast-Fehler bekomme.
Die Array-Zusammenführ-Klasse sieht so aus:
Code:
package voccoach;
public class ArrayJoiner<E> {
public ArrayJoiner() {
// do nothing
}
public E[] joinArray(E[] a, E[] b) {
E[] temp = (E[]) new Object[a.length+b.length];
System.arraycopy(a,0,temp,0,a.length);
System.arraycopy(b,0,temp,a.length,b.length);
return temp;
}
}
Eine Anwendung sieht beispielsweise so aus:
Code:
private VocFile[] localVocFiles;
// [...]
localVocFiles = new ArrayJoiner<VocFile>().joinArray(local, arFiles.toArray(new VocFile[arFiles.size()]));
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lvoccoach.VocFile;
Wenn ich jedoch versuche, ArrayJoiner mit einem VocFile-Array zu typisieren...
Code:
localVocFiles = new ArrayJoiner<VocFile[]>().joinArray(local, arFiles.toArray(new VocFile[arFiles.size()]));
joinArray(voccoach.VocFile[][],voccoach.VocFile[][]) in voccoach.ArrayJoiner<voccoach.VocFile[]> cannot be applied to (voccoach.VocFile[],voccoach.VocFile[]).
Außerdem sollte doch auch gar kein Object-Array zurückgegeben werden, wenn ich Generics verwende?!
Die Deklaration in joinArray kann ich aber ja nicht auf ein Nicht-Array ändern, da ich sonst nicht auf die length-Methode zugreifen kann.
Code:
public class ArrayJoiner<E[]> {
Auch ein nachträgliches Casten funktioniert nicht:
Code:
public E[] joinArray(Object[] a, Object[] b) {
a = (E[]) a;
b = (E[]) b;
Was kann ich tun?