Java:如何检查Field是否为java.util.Collection类型

时间:2011-12-07 22:16:42

标签: java reflection types

我有一个实用程序方法,它遍历各种类并递归检索字段。我想检查该字段是否为Collection。 以下是一些示例代码:

void myMethod(Class<?> classToCheck)

Field[] fields = classToCheck.getDeclaredFields();

for(Field field:fields)
{
   // check if field if a Collection<?>

}

提前感谢您的帮助。

6 个答案:

答案 0 :(得分:65)

if (Collection.class.isAssignableFrom(field.getType())) {

}

答案 1 :(得分:8)

您应该使用Class.isAssignableFrom

if (Collection.class.isAssignableFrom(field.getType())
    ...

答案 2 :(得分:2)

使用getType()方法

Field field =  ...;
if ( Collection.class.isAssignableFrom( field.getType() ) ){
  //do something with your collection
}

答案 3 :(得分:1)

//执行

 List<String> cashType = split(" ,AlL ");
 if(cashType instanceof Collection){
     System.out.println("cashType instanceof Collection");
 }else{
     System.out.println("cashType is not instanceof Collection");
 }

//执行其他

List<String> cashType = split(" ,AlL ");
 if(cashType instanceof Hashtable){
     System.out.println("cashType instanceof Collection");
 }else{
     System.out.println("cashType is not instanceof Collection");
 }

答案 4 :(得分:0)

for(Field field:fields) { // check if field if a Collection
  Object myInstance = field.get(classInstance); 
    // where classInstance is the instance in which the fields is stored
    if(myInstance instanceof Collection) {
        //Do your thing
    }
}

这测试字段'field'引用的实际对象(对象classInstance)是否实现了Collection。如果你想测试声明的Field类型是否实现Collection,那么它将是不同的。

答案 5 :(得分:0)

您可以通过以下方式使用getType()

if (field.getType().equals(Collection.class) {
    // Do something
}

这仅在字段声明为Collection时才有效。如果字段是Collection的子类型,例如ListVector,则无效。