2017-02-07 7 views
-1

Ich habe ein Objekt vom Typ Object[]. Alle Elemente des Arrays sind eigentlich Object[] Objekte. So im Wesentlichen sieht es aus wie diesesCast Java Array von Arrays zu Java 2D-Array

Object[] oneD = {objectArray1, objectArray2, objectArray3, ...} 

ich dies einem Object[][] werfen wollen, wie folgt aus:

Object[][] twoD = (Object[][])oneD; 

aber ich Compiler-Fehler und ClassCastException ‚s.

Gibt es einen (richtigen) Weg, dies zu tun?

+0

ja, erklären Sie es als 'Objekt [] [] asdf'. – alfasin

+0

Ich deklariere es nicht; es wird von einer Methode zurückgegeben. Für mehr Kontext habe ich eine Methode, die auf 1D-Arrays funktioniert, und ich möchte ein paar 2D-Arrays einreichen und es nur auf ihrer ersten Dimension arbeiten lassen. – nullromo

+0

Nicht. Erstellen Sie stattdessen eine neue Methode, die 2D-Arrays verarbeitet und die erste Dimension an die ursprüngliche Methode übergeben wird. – alfasin

Antwort

2

können Sie nicht zwischen Array-Typen werfen - Java nicht C ist, aber man kann man ziemlich leicht verwandeln:

Object[] oneD = {new Object[]{}, new Object[]{}, ...}; 
Object[][] twoD = Arrays.stream(oneD).map(Object[].class::cast).toArray(Object[][]::new); 
+0

Vielen Dank! Genau das habe ich gebraucht. Nimm alle Elemente von 'asdf', wirf sie auf' Object [] 'Objekte und lege sie dann alle in ein' Object [] [] '. Brilliante Lösung. – nullromo

1

einfach als

String [] a = {"a", "b"}; 
    String [] b = {"c", "d"}; 

    String [][] ab = {a,b}; 
+1

Ich denke, OP hat ein 'Object []' mit einer beliebigen Anzahl von Elementen, von denen jedes 'Object []' ist, an ihn übergeben und möchte es als 'Object [] []' behandeln. Also kann er es nicht so codieren. – Bohemian

+0

also sollte ich abstimmen, um diese Frage als "unklar" zu schließen –

+0

Ich frage nach _casting_ oder _converting_ ein 'Object []' zu einem 'Object [] []', nicht _instantiating_ ein 'Object [] []'. – nullromo

0

Unter der Annahme, dass das innere Objekt Arrays die gleiche Größe, Sie können es auf diese Weise tun:

Object[] asdf = {new Object[3], new Object[3], new Object[3]}; 
    Object[][] newAsdf = {{asdf[0]}, {asdf[1]}, {asdf[2]}}; 
+1

Außer OP weiß nicht, wie viele Elemente in 'asdf' sind, daher ist dieser Code nicht nützlich. – Bohemian