@doNotCheckMyBlogが述べたようなアプローチは良いですが、タイトルだけで尋ねられたものからです。グーグルはこのタイトルでn次元配列も識別しているので、それを必要とするすべての人のためにn次元配列を印刷するための解決策をここに投稿します:
このメソッドは、2つの関数から構成されています。1つは配列を出力し、もう1つはプリミティブと通常のオブジェクトから配列オブジェクトを作成します。(実行するjava.lang.ClassCastException
場合の回避策(Object[])(new int[]{1,2,3})
)
public static String printNdimArray(Object[] in) {
String ret = "[";
for(Object obj : in ) {
if( obj.getClass().isArray() )
ret += printNdimArray( createArrayFromArrayObject(obj) );
else
ret += obj.toString();
ret += ", ";
}
ret = ret.substring(0, ret.length() - 2);
return ret +"]";
}
他の関数は、オブジェクトまたはプリミティブ配列を通常のオブジェクト配列にキャストします。これを使用して、元の配列ツリーのリーフまで、上記の関数を再度呼び出すことができます。(元のコード:https ://stackoverflow.com/a/6427453 )
public static Object[] createArrayFromArrayObject(Object o) {
if(!o.getClass().getComponentType().isPrimitive())
return (Object[])o;
int element_count = Array.getLength(o);
Object elements[] = new Object[element_count];
for(int i = 0; i < element_count; i++)
elements[i] = Array.get(o, i);
return elements;
}
非常に大きなアレイでは、構造は明らかにもはや明確ではありませんが、いくつかの調整で修正できます。配列に少量のオブジェクトがあると、次のようになります。
out: [Mad Max: Fury Road, 7200, [600, 3600, 4000], [EN], [DE, EN, FR], sci_fi]
また、1次元配列の表示にも優れています。
out: [FR, EN, DE, CA]