我正在进行一些反思工作,遇到了一个小问题。
我试图将对象打印到某个GUI树中,并且在通用方式下检测数组时遇到了问题。
我建议使用:
object instanceof Iterable
来完成任务,但它并不起作用,(显然只适用于Lists和Sets以及实现Iterable接口的类)
那么,如何才能识别出一个数组,例如Object[]
、long[]
或者Long[]
?
谢谢
我正在进行一些反思工作,遇到了一个小问题。
我试图将对象打印到某个GUI树中,并且在通用方式下检测数组时遇到了问题。
我建议使用:
object instanceof Iterable
来完成任务,但它并不起作用,(显然只适用于Lists和Sets以及实现Iterable接口的类)
那么,如何才能识别出一个数组,例如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, e.g. int[], Object[], String[], ...
Object array = ...;
for (Object element : ArrayUtils.toIterable(array)) {
// element of type Integer for int[]
System.out.println(element);
}
请查看molindo-utils的README文件,了解如何获取molindo-utils,或者如果您愿意,随意复制代码,只要您认为合适。