【问题标题】:Pretty print array object, not array of objects?漂亮的打印数组对象,而不是对象数组?
【发布时间】:2011-03-10 08:12:59
【问题描述】:

所以,我已经发现了

Arrays.toString(arr);

所以不要把我指向this question

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

【问题讨论】:

    标签: java arrays printing pretty-print


    【解决方案1】:

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

    【讨论】:

    • 虽然我无法导入您的忠实遵守,但我现在的任务是在自然法则允许的情况下,尽可能地转世您的建议精神。
    • 为什么不能导入?下载commons-lang,添加到classpath,就大功告成了
    • 要么是因为 Jordan 不能使用额外的库,要么是因为 commons-lang 可能与 Jordan 使用的 JDK 版本不兼容。真的有那么多人还在用 1.3 吗?
    【解决方案2】:

    你必须测试和投射。

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

    你可以通过反射来做到这一点,但它最终不会更干净,尽管它会少几行代码。

    【讨论】:

    • 我在向编程之神祈祷,希望可以避免这种情况,而 StackOverflow 是我最后的选择。我现在将执行这种可憎的行为,但要知道我的灵魂随着即将到来的交付而被送入地狱深处。愿你平安,兄弟。 敬礼
    • 抛开戏剧,为什么这么困扰你? 10行额外的代码就足以让你觉得自己失去了纯真?原语不是对象是 Java 的核心现实。如果这让你很困扰,那么,克服它或选择另一种语言。
    • 这主要让我感到困扰,因为我正在使用的代码中有相当多的 if-else 链 1000 行长,这本来可以很容易地避免,但现在已经在项目中根深蒂固,我希望避免在链中添加链接。我用递归函数(帮助嵌套数组)修复了它,类似于 Bozho 的库函数所做的。我会将此函数添加到我的问题中以供参考和批评。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2016-04-26
    • 2015-06-20
    相关资源
    最近更新 更多