Datentypen Object in 2-dimensionales String Array zurückwandeln

Kosta.Kos

Mitglied
Hallo Devs,

ich habe eine Frage bezüglich Object to 2d String Array cast.
Ich habe ein 2-dimensionales-String Array an eine Variablre mit dem Typ Object übergeben.
An anderer Stelle möchte ich es wieder zu einem 2d String umwandeln. Leider klappt das casten nicht.


-->object = str2darray

..
..

--> str2darray = (String [][]) object;

Ich habe keine Ahnung warum es nicht geht.

Grüße
Kosta
 
Na dann wird dann wohl zu diesem Zeitpunkt kein [c]String[][][/c] in [c]object[/c] sein. Etwas Code (am Besten ein KSKB) wär da hilfreich für uns. Oder aber du gehst selbst schnell mit dem Debugger durch und merkst was drin ist, und kannst dadurch assoziieren, was das Problem ist.
 
du kannst nicht einfach jedes als Object[][] deklariertes Array in ein String[][] casten. Es ist wichtig, welches Objekt sich im endeffet dahinter verbirgt.

Java:
    public static void main (String[]args){
    	// funktioniert
    	Object[][] obj = new String[0][0];
    	String[][] objCasted = (String[][])obj;
    	
    	// funktioniert nicht
    	Object[][] obj2 = new Object[0][0];
    	String[][] objCasted2 = (String[][])obj2;
    }
 
Hi,
danke für die schnellen Anworten.
Also ich habe ein:

public String [][]xmlArray = new String [20][20];

Dieses wird mit Strings gefüllt. Anschließend rufe ich:

Object object = (Object) xmlArray;

Wenn ich nun Debugge und mir den Inhalt von object ansehen möchte kommt die Fehlermeldung:

'JDI thread evaluations' has encountered a problem.
Exception processing async thread queue

Die ClassCastException tritt also nicht mehr auf.
Ich probiere übrigens ein 2D String Array in ein ganz normales Object zu schreiben und nicht in ein Object[][].
Kann es sein, dass das nicht geht?

Gruß
Kosta.
 
[c]Object[][][/c] <-> [c]String[][][/c] würde IMHO sowieso nicht funktionieren. Arrays sind etwas tricky (und sche*sse und (meist) unnütz) in Java. Nach Möglichkeit solltest du Listen (oder sonstige Collections) verwenden. Aber warum hast du überhaupt den Fall, dass du etwas casten musst?
 
Zuletzt bearbeitet:
Hintergrund ist der, dass ich z.Z. Android entwickle und das 2d String array an eine neue Klasse bzw. Activity übergeben möchte.
Daten übergeben kann man mit so genannten Intents und Bundles. Leider gibt es nur die Standartmethoden für int[] , String[], aber nicht für String[][]. Deshalb wollte ich das 2D Array Serializeable bzw. Parcelable machen. In der neuen Klasse wollte ich dann wieer de-serialisieren. Auch in den Methoden von Parcelable kann ich das 2D String Array nicht übertragen bzw. 'Parcelablen', deshalb wollte ich es in ein Object umwandeln und später beim Empfänger wieder in ein 2D String Array umwandeln. (Ich hoffe , das war jetzt einigermaßen verständlich)

Gruß
Kosta
 
Ach so, ja dann muss man es natürlich so machen. Hab ich mir fast gedacht. Aber eben: Wo es geht mit Lists, Maps, Sets etc und Generics arbeiten 🙂
 
Wenn ich es nun 'Parcelablen' lasse und dann debugge, bekomme ich wirklich ein Object mit dem 2d Inhalt den ich haben möchte.
Nur kann ich es leider nicht mehr zu einem String[][] casten.
 
du könntest dir dafür vllt eine Methode schreiben:
Java:
    public static String[][] objectToStringArray(Object[][] obj) {
    	String[][] str = new String[obj.length][];
    	for (int i = 0; i < obj.length; i++) {
    		str[i] = new String[obj[i].length];
    		for (int j = 0; j < obj[i].length; j++) {
    			str[i][j] = obj[i][j].toString();
    		}
    	}
    	return str;
    }
 
wirklich komisch ist, dass

Java:
 String str = object[0][1]
immer den Fehler: The type of expression must be an array type but it resolved to Object.
Zur Laufzeit stehen in object aber die Daten bzw. sind 2 dimensionen enthalten.
Ich verstehe das echt nicht...
 
Eine andere Möglichkeit wäre es nicht Parcelable zu nutzen sondern Serializeable.
Könnte mir jemand kurz zeigen, wie ich ein 2-dimensionales-String-Array serialisiere und de-serialisiere?

Gruß
Kosta
 
Ich würde mal sagen du machst was falsch, aber ohne deinen Code zu kennen kann man dir halt schlecht helfen. Folgendes funktioniert nämlich ohne Probleme.

Java:
import java.util.Arrays;

public class Test {
	public static void main(String[] args) {	
		String[][] stringArray = { 
				{"A", "B", "C"},
				{"D", "E", "F"},
				{"G", "H", "I"}
		};
		doSomething(stringArray);
	}
	
	private static void doSomething(Object object) {
		String[][] magic = (String[][])object;
		System.out.println(Arrays.deepToString(magic));
	}
}
 
Hi,

ich habe gerade deine Methode getestet mit einem anderen String[][] Array (TEST-ARRAY).
Die doSomething() funktioniert bei mir auch problemlos, also muss irgendetwas auf dem Weg dahin falsch laufen. Wenn ich den Fehler habe, melde ich mich direkt.

Übergangsweise habe ich mir einfach eine statische Speicherklasse gemacht, die die Werte speichert und für die andere Klasse wieder liefert. Ich finde jedoch, dass das schlechter Stil ist. Werde also nochmal nach dem oben genannten Problem suchen.

Danke euch für die Hilfe.

Kosta
 

Neue Themen


Zurück
Oben