4

だから、私はすでに発見しました

Arrays.toString(arr);

したがって、この質問を私に指摘しないでください。

私の問題はほんの少し違います。この場合、問題の配列へのネイティブ配列ポインターがありません。私はそれをオブジェクトポインタとして持っており、それは任意のタイプ(プリミティブまたはその他)の配列である可能性があります。この場合、ObjectポインタをObject []にキャストすることで、上記のtoString()メソッドを使用できます。ただし、ポインタがプリミティブ配列の場合、ランタイム例外がスローされてクラッシュします。それで?

例:

double test[] = {1, 2, 3, 4};
Object t = test;
// Now how do I pretty print t as an array with no access to test?

私はこれで私の問題を解決しました:

public String unkObjectToString(Object o) {
    if(!o.getClass().isArray()) return o.toString();
    int len = Array.getLength(o);
    String ret = "[";
    for(int i = 0; i < len; i++) {
        Object q = Array.get(o, i);
        ret += unkObjectToString(q);
        if(i == len - 1)
            ret += "]";
        else
            ret += ", ";
    }
    return ret;
}
4

2 に答える 2

2

ArrayUtils.toString(arrayObj)( commons-lang ) - あなたが望むことを正確に行います (多次元配列も処理します)。commons-lang jar をダウンロードしてクラスパスに追加するだけです。

于 2010-06-30T20:20:33.823 に答える
2

テストしてキャストする必要があります。

if (o instanceof byte[]) {
      return Arrays.toString((byte[]) o);
} //etc.

リフレクションを介してこれを行うこともできますが、コードが数行少なくなりますが、最終的にはきれいにはなりません。

于 2010-06-30T20:16:57.497 に答える