我正在做一些反射工作并遇到一些小问题。通过反射对数组进行迭代
我试图打印对象到一些GUI树,并以通用的方式检测数组时遇到问题。
我建议:
对象的instanceof可迭代
将使工作,但它没有,(显然只适用于列表和设置与谁实现它。)
那么,我怎么会认识到阵列一些Object[]
,或long[]
或Long[]
..?
感谢
我正在做一些反射工作并遇到一些小问题。通过反射对数组进行迭代
我试图打印对象到一些GUI树,并以通用的方式检测数组时遇到问题。
我建议:
对象的instanceof可迭代
将使工作,但它没有,(显然只适用于列表和设置与谁实现它。)
那么,我怎么会认识到阵列一些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
)
你可以做
if (o instanceof Object[]) {
Object[] array = (Object[]) o;
// now access array.length or
// array.getClass().getComponentType()
}
你的意思是Object.getClass().isArray()
?
首先,@ Bozho的答案是完全正确的。
如果你想这是比较容易可用,我刚刚建立在我们little OSS utility molindo-utils的方法,轮流未知类型的数组到一个可迭代: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()..哈哈 – Roman 2010-02-04 14:46:05