[英]Iterating over arrays by 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, 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的 README,如果您願意,可以隨意復制代碼,就像您認為合適一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.