【发布时间】:2011-01-13 02:40:43
【问题描述】:
我正在做一些反思工作并解决一个小问题。
我正在尝试将对象打印到某个 GUI 树,但在以通用方式检测数组时遇到问题。
我建议:
可迭代的对象实例
会完成这项工作,但它不会,(显然仅适用于 Lists 和 Set 以及任何实现它的人。)
那么我如何识别数组 Some Object[] ,或 long[] 或 Long[] ..?
谢谢
【问题讨论】:
标签: java reflection
我正在做一些反思工作并解决一个小问题。
我正在尝试将对象打印到某个 GUI 树,但在以通用方式检测数组时遇到问题。
我建议:
可迭代的对象实例
会完成这项工作,但它不会,(显然仅适用于 Lists 和 Set 以及任何实现它的人。)
那么我如何识别数组 Some Object[] ,或 long[] 或 Long[] ..?
谢谢
【问题讨论】:
标签: java reflection
如果你不想只检查对象是否为数组,还想对其进行迭代:
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)
【讨论】:
首先,@Bozho 的回答是完全正确的。
如果您想让它更易于使用,我刚刚在 little OSS utility 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 的自述文件,了解如何获取 molindo-utils 或随意复制代码,只要您认为合适即可。
【讨论】:
你的意思是Object.getClass().isArray()?
【讨论】:
你可以的
if (o instanceof Object[]) {
Object[] array = (Object[]) o;
// now access array.length or
// array.getClass().getComponentType()
}
【讨论】: