gpt4 book ai didi

java - Objects.deepToString(Object o) 方法

转载 作者:行者123 更新时间:2023-12-01 16:24:04 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com