类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/