Wie kann man ein Array eines Typs in ein Array eines verwandten Typs wandeln?

Die Klasse java.util.Arrays stellt eine Reihe überladener Methoden bereit, um Arrays zu kopieren. Hiermit sind auch Umwandlungen in andere Array-Typen möglich.

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.