Objects.deepToString(Object o) method

ⅰ亾dé卋堺 提交于 2020-07-04 01:58:32

问题


The class java.util.Objects contains the deepEquals(Object a, Object b) method that can be used to compare objects of any type (including arrays and null references), but doesn't contain a similar deepToString(Object o). This is disappointing. (By the way, the private constructor of this class contains the message "No java.util.Objects instances for you!" that explains to some extent why this class is so mean). That being the case, I've tried to implement the method myself:

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

The problem is that it doesn't work with one-dimensional arrays of primitive types. Do I have to go through all primitive array types with nested else ifs and call corresponding Arrays.toString(...) methods for them, or there is a simpler alternative?


回答1:


I came to this solution: wrap a primitive array into Object[] and remove the outer brackets from the result returned by the 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);
    }
}

Not very efficient, because it could create two large strings instead of a single one. But with this trick, I can use the hidden

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

method that contains the primitive arrays parsing logic.



来源:https://stackoverflow.com/questions/62191507/objects-deeptostringobject-o-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!