Wie kann man ein Array eines Typs in ein Array eines anderen 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 das gesamte Array) 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);
    }
}

Dies ist selbstverständlich auch mit anderen Array-Typen möglich. Dank der Boxing/Unboxing-Funktionen kann man sogar primitive Typen erhalten, allerdings ist eine Wandlung direkt in Arrays solcher Typen 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 erzeugt, das intern aus Integer-Werten besteht. Es wird dann explizit in ein Integer-Array gewandelt, dessen Werte durch Unboxing schließlich in primitive int-Typen gewandelt werden.
Die Aktionen sollten in einem durch try-catch gesicherten Block stattfinden, um unerlaubtes Casting abzufangen.