Java:如何检查字段是否为Java.util.Collection类型



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

void myMethod(Class<?> classToCheck)
Field[] fields = classToCheck.getDeclaredFields();
for(Field field:fields)
{
   // check if field if a Collection<?>
}

提前感谢您的帮助。

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

您应该使用Class.isAssignableFrom:

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

使用getType()方法

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

//如果

 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");
 }

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

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

只有当字段被声明为Collection时,这才会起作用。如果字段是"集合"的子类型,例如ListVector,则该字段将不起作用。

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
    }
}

这将测试(对象classInstance的(字段"field"引用的实际对象是否实现Collection。如果要测试已声明的字段类型是否实现了Collection,则情况会有所不同。

相关内容

  • 没有找到相关文章

最新更新