繁体   English   中英

Java 获得了对某些数组类型的对象引用的良好 toString

[英]Java get nice toString for Object reference to some array type

如果我有一个 Object 类型的引用并且我知道这是一个数组,但我不知道是什么类型的数组,那么生成一个好的 String 的最佳方法是什么?

或者换句话说,以下方法的最佳/最好的实现是什么:

private static String anyArrayToString(Object someArray) {
    if (!someArray.getClass().isArray()) {
        throw new IllegalArgumentException("someArray is not an array!");
    }
    return ???;
}

我知道来自 Arrays 的方法,即 Arrays.toString(int[])、Arrays.toString(double[]) 等。这些在这里不起作用,因为它们是强类型的,我不觉得有一个大的if-else-if 级联。 (虽然如果找不到更好的解决方案,这是我的计划 B)

理想情况下,我想要一个适用于对象引用的方法,例如 System.arraycopy,它动态检查传递的引用是否为数组。

为什么我不知道它是什么样的数组?

因为我在遍历不同对象的所有 get-methods 之后通过反射获得了对象引用。 它是一种实用方法的一部分,即使这些差异嵌套很深,也可以找到两个复杂对象之间的任意差异。

非常感谢。

编辑:

这不是打印 Java 数组的最简单方法什么的副本 因为这里数组的元素类型是未知的,我们只有对 Object 的引用,而不是某些特定的数组类型。

最简洁、最简洁的方法是使用 Java8 Stream API和来自Array实用程序类的方法。

静态方法Array.getLength采用 Object 类型的引用。 如果该引用指向一个数组,则返回该数组的长度。 否则抛出异常。 静态方法Array.get相应地工作以访问单个数组元素。

private static String anyArrayToString(Object someArray) {
    if (!someArray.getClass().isArray()) {
        throw new IllegalArgumentException("someArray is not an array!");
    }
    return "[" + IntStream.range(0, Array.getLength(someArray))
                     .mapToObj(i -> Objects.toString(Array.get(someArray, i)))
                     .reduce("", (l, r) -> l+", "+r)
               + "]";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM