我已尝试使用以下代码,但返回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?
答案 0 :(得分:1)
int[]
不是Array
的实例。
使用o.getClass().isArray()
代替
此外,Collection
检查是多余的,因为它扩展了Iterable
,for each
结构适用于Iterable
或数组。
如注释中所述,java.lang.reflect.Array
是用于创建/访问数组的实用程序类。 不是数组的基类
对象数组扩展Object[]
,而基本数组根据this answer扩展Object