如何确定obj可用于for循环

时间:2014-10-28 15:03:53

标签: java for-loop

我已尝试使用以下代码,但返回false。

package ro.idea.ex;

import java.lang.reflect.Array;
import java.util.Collection;

/**
 * Created by roroco on 10/28/14.
 */
public class Ex {
    public <T> boolean canWorkInForLoop(T o) {
        return o instanceof Collection || o instanceof Iterable || o instanceof Array;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2};
        Object r = new Ex().canWorkInForLoop(arr);
        System.out.println("r:" + r + "\t\t" + new Exception().getStackTrace()[0].getFileName() + ":" + new Exception().getStackTrace()[0].getLineNumber());
    }
}

我的问题是:

如何确定可以在for循环中使用的所有obj,比如new int [],ArrayList的实例和其他obj?

1 个答案:

答案 0 :(得分:1)

int[]不是Array的实例。 使用o.getClass().isArray()代替

可以在this question

的答案中找到更多信息

此外,Collection检查是多余的,因为它扩展了Iterablefor each结构适用于Iterable或数组。

如注释中所述,java.lang.reflect.Array是用于创建/访问数组的实用程序类。 是数组的基类 对象数组扩展Object[],而基本数组根据this answer扩展Object