2

Object 型のオブジェクトがあり、toString()メソッドを使用してその String 表現を返したいのですが、それが配列の場合を除いて、オブジェクトの Arrays.toString() を返したい (必要ありません) a deepToString)。

私はこれを使用することを考えました:

public static String getValueAsString(Object value){
    if(value != null && value.getClass().isArray()){
        if(value instanceof Object[])
            return Arrays.toString((Object[])value);
        else if(value instanceof int[])
            return Arrays.toString((int[])value);
        else ...
    }else
        return String.valueOf(value);
}

問題は、それが配列であることを検出できることですが、さまざまなプリミティブ配列をすべて処理する必要があります...

これを達成するためのよりクリーンな方法はありますか? コアメソッドまたはリフレクションを使用していますか?

4

4 に答える 4

2

次のように、reflexionを使用して、配列で適切なArrays.toStringメソッドを呼び出すことができます。

public static String toStr(Object a) {
        if (a == null)
              return "null"; //like String.valueOf(null);

        Class<?> clazz = a.getClass();
        if (clazz.isArray()) {
            if (Object[].class.isAssignableFrom(clazz))
                clazz = Object[].class;
            try {
                final Method m = Arrays.class.getMethod("toString", clazz);
                return (String) m.invoke(null, a);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            return a.toString();
        }
    }

これは、プリミティブ配列とオブジェクト配列で機能します。

public static void main(String[] args) {
        System.out.println(toStr(new int[]{2,4}));
        System.out.println(toStr(new double[]{2L,3L}));
        System.out.println(toStr(new String[]{"a","b", null}));
        System.out.println(toStr(new Integer[]{2,3}));
        System.out.println(toStr(new char[]{'a','r'}));
    }

出力:

[2, 4]
[2.0, 3.0]
[a, b, null]
[2, 3]
[a, r]
于 2012-07-20T10:23:47.900 に答える
1

ジェネリッククラスを使用して、次のような配列を繰り返すことができますArray

private static String toStr(Object o) {
    if (o == null || !o.getClass().isArray()) {
        return String.valueOf(o);

    } else {
        final int len = Array.getLength(o);

        StringBuilder sb = new StringBuilder('[');
        for (int i = 0; i < len; i++)
            sb.append(Array.get(o, i)).append(i + 1 < len ? ", " : "");

        return sb.append(']').toString();
    }
}

例:

public static void main(String[] args) {

    System.out.println(toStr(new int[] {1,2,3}));
    System.out.println(toStr(new double[] {4.0, 5.0, 6.0}));
    System.out.println(toStr(new Object[] {null, 7, 8.0}));
    System.out.println(toStr("Hello World!"));
}

出力:

[1, 2, 3]
[4.0, 5.0, 6.0]
[null, 7, 8.0]
Hello World!
于 2012-07-20T10:24:46.127 に答える
0

Apache Commons langを試してください --ArrayUtils.toString()

public static String toString(Object array)
于 2012-07-20T10:32:01.497 に答える
0

最近、このブログ投稿をベースとして、柔軟で再帰的な toString メソッドを作成しました。

于 2012-07-20T11:51:31.770 に答える