liefert isArray ein falsches Resultat?

Andi_CH

Top Contributor
Im Zusammenhang mit allgemeiner Programmierung bin ich auf ein Problem gestossen.

Man kann Arrays mit beliebigen Dimensonen erstellen (siehe hier)

Ich möchte einen Array mit gleicher Dimension erstellen und versuche nun die Dimension eines Arrays herauszufinden, aber das geht schief. Warum?

Java:
public class TwoDimArrays {
	private static double[][] d = {{1.0, 2.0},{3.0, 4.0}};

	public static void checkArray(Object o, int stufe) {
		if (stufe>10) {
			System.out.println("ABBRUCH!");
			return;
		}
		if (o.getClass().isArray()) {
			System.out.println(stufe + " ist ein Array");
			Object[] oa = (Object[]) o;
			checkArray(oa[0], stufe+1);
		} else {
			System.out.println(stufe + " ist kein Array");
		}
	}

	public static void main(String[] args) {
		checkArray(d, 1);
	}
}

Output:
Code:
1 ist ein Array
2 ist ein Array
Exception in thread "main" java.lang.ClassCastException: [D cannot be cast to [Ljava.lang.Object;
	at com.javaforum.casting.TwoDimArrays.checkArray(TwoDimArrays.java:16)
	at com.javaforum.casting.TwoDimArrays.checkArray(TwoDimArrays.java:17)
	at com.javaforum.casting.TwoDimArrays.main(TwoDimArrays.java:41)
 
isArray funktioniert, aber ein double Array kann nie und nimmer in ein Objekt Array gecastet werden, sind unterschiedliche Tiere.
 
Mit sowas wie
Code:
void checkArray(Class<?> c)
{
        ...
    if (c.isArray())
    {
        checkArray(c.[B]getComponentType[/B](), stufe+1);    
        ...
}
sollte es gehen.
 

Zurück
Oben