T
Tersus
Gast
Guten Tag,
folgender Quelltext:
Wenn ich der Klassenmethode TesteTypAufArray(new int[1]) eindimensionale Arrays primitiver Datentypen übergebe, folgt die CastClassException [I cannot be cast to [Ljava.lang.Object;".
Das Array eines primitiven Datentypen kann nicht auf ein Array eines komplexen Datentypen gecastet werden.
1. Wieso versucht die JVM, auf [Ljava.lang.Object zu casten? Dieser Typ kommt doch nirgends vor!
Unser Generic T ist vom Typ des Übergabeparameters. In diesem Fall vom Typ [I, also einem Array, welches Elemente des primitiven Datenyps int beinhaltet.
Nach Wahrheit der If-Abfrage handelt es sich definitiv um ein Array. Wie sagen wir dem Compiler, dass er eine Variable vom Typ Array vor sich hat? Wir casten auf ein Array. Das geht nur mit ((T[]) array).
Nun können wir die Methoden und Attribute eines Arrays aufrufen, wie unter anderem length.
Sobald das jedoch gemacht wird, folgt der Wurf der hier erwähnten Ausnahme.
2. Wie kann ich die Methode sicher gegenüber primitiven Datentypen machen?
Selbst Arrays von primitiven Datentyen sind Instanzen von Object.
Meine Lösung ist im Moment wirklich nur die Überprüfung der Zeichenketten von getClass().toString();. Also Überprüfen, ob die Teilzeichenkette Ljava.lang.Object im Übergabeparameter vorkommt.
folgender Quelltext:
Code:
@SuppressWarnings("unchecked")
public static <T> void TesteTypAufArray(T array){
if(array.getClass().isArray()){
int arraybereite = ((T[]) array).length;
System.out.println(arraybereite);
}else{
throw new IllegalArgumentException("Kein Array!");
}
}
Wenn ich der Klassenmethode TesteTypAufArray(new int[1]) eindimensionale Arrays primitiver Datentypen übergebe, folgt die CastClassException [I cannot be cast to [Ljava.lang.Object;".
Das Array eines primitiven Datentypen kann nicht auf ein Array eines komplexen Datentypen gecastet werden.
1. Wieso versucht die JVM, auf [Ljava.lang.Object zu casten? Dieser Typ kommt doch nirgends vor!
Unser Generic T ist vom Typ des Übergabeparameters. In diesem Fall vom Typ [I, also einem Array, welches Elemente des primitiven Datenyps int beinhaltet.
Nach Wahrheit der If-Abfrage handelt es sich definitiv um ein Array. Wie sagen wir dem Compiler, dass er eine Variable vom Typ Array vor sich hat? Wir casten auf ein Array. Das geht nur mit ((T[]) array).
Nun können wir die Methoden und Attribute eines Arrays aufrufen, wie unter anderem length.
Sobald das jedoch gemacht wird, folgt der Wurf der hier erwähnten Ausnahme.
2. Wie kann ich die Methode sicher gegenüber primitiven Datentypen machen?
Selbst Arrays von primitiven Datentyen sind Instanzen von Object.
Meine Lösung ist im Moment wirklich nur die Überprüfung der Zeichenketten von getClass().toString();. Also Überprüfen, ob die Teilzeichenkette Ljava.lang.Object im Übergabeparameter vorkommt.