Java 获取对某些数组类型的对象引用的不错的 toString
Java get nice toString for Object reference to some array type
如果我有一个 Object 类型的引用并且我知道这是一个数组,但我不知道是什么类型的数组,生成一个漂亮的字符串的最佳方法是什么?
或者换句话说,以下方法的最佳/最佳实现是什么:
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,它动态检查传递的引用是否为数组。
为什么我不知道是什么数组?
因为我在遍历不同对象的所有获取方法后通过反射获取了对象引用。它是实用方法的一部分,可以发现两个复杂对象之间的任意差异,即使这些差异嵌套得很深。
非常感谢。
编辑:
这不是 What's the simplest way to print a Java array? 的副本,因为这里数组的元素类型是未知的,我们只有对对象的引用而不是某些特定的数组类型。
最简洁明了的方法是使用 Java8 Stream API and the methods from the Array 实用程序 class.
静态方法 Array.getLength takes a reference of type Object. If that reference points to an array, the length of that array is returned. Otherwise an exception is thrown. Tne static method 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)
+ "]";
}
如果我有一个 Object 类型的引用并且我知道这是一个数组,但我不知道是什么类型的数组,生成一个漂亮的字符串的最佳方法是什么?
或者换句话说,以下方法的最佳/最佳实现是什么:
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,它动态检查传递的引用是否为数组。
为什么我不知道是什么数组?
因为我在遍历不同对象的所有获取方法后通过反射获取了对象引用。它是实用方法的一部分,可以发现两个复杂对象之间的任意差异,即使这些差异嵌套得很深。
非常感谢。
编辑:
这不是 What's the simplest way to print a Java array? 的副本,因为这里数组的元素类型是未知的,我们只有对对象的引用而不是某些特定的数组类型。
最简洁明了的方法是使用 Java8 Stream API and the methods from the Array 实用程序 class.
静态方法 Array.getLength takes a reference of type Object. If that reference points to an array, the length of that array is returned. Otherwise an exception is thrown. Tne static method 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)
+ "]";
}