java - Objects.deepToString(Object o) 方法

标签 java arrays object tostring utility-method

java.util.Objects包含deepEquals(Object a, Object b)方法,可用于比较任何类型的对象(包括数组和null)引用),但不包含类似的 deepToString(Object o)。这令人失望。 (顺便说一下,这个类的私有(private)构造函数包含消息“No java.util.Objectsinstances for you!”,这在某种程度上解释了为什么这个类如此卑鄙)。既然如此,我尝试自己实现该方法:

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(...) 方法,或者有一个更简单的替代方法?

最佳答案

我找到了这个解决方案:将原始数组包装到 Object[] 中并将public 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)

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

关于java - Objects.deepToString(Object o) 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62191507/

相关文章:

java - Android Studio、Core Java 中的 Ionic 应用程序开发

c++ - 指向二维数组和分配的指针

arrays - 快速从数组中获取值并使用递归函数将它们放入另一个数组

java - 打印一个带有原始数组中间元素的新数组

java - 使用自定义主题的 actionbar 时如何更改 actionbarsherlock 菜单项字体?

java - 如何在 JSF2 中使用参数重定向?

java - 在 super() 构造函数中获取子类名称

JAVASCRIPT 函数了解其他函数

c++ - 控制 C++ 析构函数和对象的 ivars 的顺序

javascript - [...new set(array)] 在 JavaScript 中如何工作?