簡體   English   中英

通過反射迭代數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM