通过reflection迭代数组

我正在做一些反思工作并且遇到一个小问题。

我正在尝试将对象打印到某个GUI树,并且以通用方式检测数组有问题。

我建议:

对象instanceof Iterable

会完成这项工作,但事实并非如此,(显然只适用于Lists和Set以及任何实现它的人。)

那我怎么会认出一个Array Some Object[] ,或long[]Long[] ..?

谢谢

如果您不想只检查对象是否是数组,还要迭代它:

 if (array.getClass().isArray()) { int length = Array.getLength(array); for (int i = 0; i < length; i ++) { Object arrayElement = Array.get(array, i); System.out.println(arrayElement); } } 

(上面的类是java.lang.reflect.Array

你的意思是Object.getClass().isArray()

你可以做

 if (o instanceof Object[]) { Object[] array = (Object[]) o; // now access array.length or // array.getClass().getComponentType() } 

首先,@ Bozho的回答是完全正确的。

如果你想让它更容易使用,我刚刚在我们的小OSS实用程序molindo-utils中创建了一个方法, 它将一个未知类型的数组转换为Iterable: ArrayUtils.toIterable(Object)

这样,你可以这样做:

 // any array, eg int[], Object[], String[], ... Object array = ...; for (Object element : ArrayUtils.toIterable(array)) { // element of type Integer for int[] System.out.println(element); } 

有关如何获取molindo-utils的信息,请参阅molindo-utils的 README,如果您愿意,可以随意复制代码,就像您认为合适一样。