漂亮的打印数组对象,而不是对象数组?

时间:2010-06-30 20:11:32

标签: java arrays printing pretty-print

所以,我已经发现了

Arrays.toString(arr);

所以不要指向this question

我的问题有点不同。在这种情况下,我没有指向相关数组的本机数组指针。我把它作为一个Object指针,它可以是任何类型的数组(原始或其他)。在这种情况下,我可以通过将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;
}

2 个答案:

答案 0 :(得分:2)

你必须进行测试和演员。

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

你可以通过反射来做到这一点,但最终它不会是任何清洁工,尽管它会少几行代码。

答案 1 :(得分:2)

ArrayUtils.toString(arrayObj)commons-lang) - 完全符合您的要求(也处理多维数组)。只需下载commons-lang jar并将其添加到类路径中。