Wie kann man ein Array eines Typs in ein Array eines verwandten Typs wandeln?
Gelegentlich kommt es vor, dass eine Methode ein Object-Array
als Rückgabewert liefert, für die Weiterverarbeitung
aber z.B. ein String-Array vorliegen muss. Das
Beispiel zeigt, wie dies mit Hilfe der Methode Arrays.copyOf()
gelöst werden kann.
Die Methode verlangt drei Parameter:
das Original-Array, die zu kopierende Länge (hier diejenige
des gesamten Arrays) und die Zielklasse.
import java.util.Arrays;
public class ArrayWandeln {
public static void main(String[] args) {
Object[] oA = {"Ene", "mene", "Maus", "und", "Du", "bist", "raus"};
String[] sA = Arrays.copyOf(oA, oA.length, String[].class);
}
}
Natürlich muss zwischen Ausgangs- und Zieltyp eine
Verwandtschaftsbeziehung bestehen, sodass eine Wandlung
überhaupt möglich ist.
Dank der Boxing/Unboxing-Funktionen
kann eine Array-Transformation sogar mit primitiven Typen
erfolgen. Allerdings nur über diesen nicht ganz kostenlosen
Umweg. Eine Wandlung direkt in Arrays dieser Typen ist nicht
möglich:
import java.util.Arrays;
public class ArrayWandeln2 {
public static void main(String[] args) {
Object[] oA = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
try {
Integer[] iA = Arrays.copyOf(oA, oA.length, Integer[].class);
for (int i : iA) {
System.out.println(i);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Im obigen Beispiel wird ein Object-Array mit
primitiven int-Literalen erzeugt, die intern zu Integer-Werten
gecastet werden. Das Array kann dann explizit zu einem Array mit
Integer-Objekten kopiert werden, deren Werte durch
Unboxing schließlich wieder in primitive int-Typen
gewandelt werden können.
Solche Aktionen sollten in einem durch
try-catch gesicherten Block stattfinden, um unerlaubtes Casting
abzufangen.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.