Objects.deepToString(Object o)方法

问题描述 投票:0回答:1

java.util.Objects类包含deepEquals(Object a, Object b)方法,该方法可用于比较任何类型的对象(包括数组和空引用),但不包含类似的deepToString(Object o)。这真令人失望。 (顺便说一句,此类的私有构造函数包含消息“没有您的java.util.Objects实例!”在某种程度上解释了为何此类如此含义)。在这种情况下,我尝试自己实现该方法:

public static String deepToString(Object o) {
    if (o == null || !o.getClass().isArray())
        return Objects.toString(o);
    else
        return Arrays.deepToString((Object[])o);
}

问题是它不适用于基本类型的一维数组。我是否必须遍历带有嵌套else if的所有原始数组类型并为其调用相应的Arrays.toString(...)方法,还是有一个更简单的替代方法?

java arrays object tostring utility-method
1个回答
0
投票

[我来到这个解决方案:将原始数组包装到Object[]中,并从公众Arrays.deepToString(Object[] a)返回的结果中删除外括号:

public static String deepToString(Object o) {
    if (o == null || !o.getClass().isArray())
        return Objects.toString(o);
    else if (o instanceof Object[])
        return Arrays.deepToString((Object[])o);
    else {
        String s = Arrays.deepToString(new Object[] { o });
        return s.substring(1, s.length() - 1);
    }
}

效率不高,因为它可以创建两个大字符串,而不是一个字符串。但是有了这个技巧,我可以使用隐藏的

Arrays.deepToString(Object[] a, StringBuilder buf, Set<Object[]> dejaVu)

包含原始数组解析逻辑的方法。

© www.soinside.com 2019 - 2024. All rights reserved.