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.