Java 对某些数组类型的对象引用很好



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

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

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

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

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

为什么我不知道它是哪种数组?

因为我在迭代不同对象的所有 get 方法后通过反射获取对象引用。它是实用程序方法的一部分,该方法查找两个复杂对象之间的任意差异,即使这些差异嵌套得很深。

谢谢。

编辑:

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

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

静态方法 Array.getLength 采用 Object 类型的引用。如果该引用指向数组,则返回该数组的长度。否则将引发异常。Tne 静态方法 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)
+ "]";
}

相关内容

最新更新