Подтвердить что ты не робот

Java: как проверить, является ли поле типа java.util.Collection

У меня есть метод утилиты, который проходит через различные классы и рекурсивно извлекает поля. Я хочу проверить, является ли это поле Collection. Вот пример кода:

void myMethod(Class<?> classToCheck)

Field[] fields = classToCheck.getDeclaredFields();

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

}

Заранее благодарим за помощь.

4b9b3361

Ответ 1

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

}

Ответ 2

Вы должны использовать Class.isAssignableFrom:

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

Ответ 3

Используя метод getType()

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

Ответ 4

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. Если вы хотите проверить, будет ли объявленный тип поля обладать коллекцией, это будет другим.

Ответ 5

Вы можете использовать getType() следующим образом:

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

Это будет работать, только если поле объявлено как Collection. Он не будет работать, если поле является подтипом коллекции, например List или Vector.

Ответ 6

//Выполняется, если

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

//Выполняет else

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