Java: Как проверить, имеет ли Поле тип java.util.Collection - PullRequest
20 голосов
/ 08 декабря 2011

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

void myMethod(Class<?> classToCheck)

Field[] fields = classToCheck.getDeclaredFields();

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

}

Заранее спасибо за помощь.

Ответы [ 6 ]

66 голосов
/ 08 декабря 2011
if (Collection.class.isAssignableFrom(field.getType())) {

}
8 голосов
/ 08 декабря 2011

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

if (Collection.class.isAssignableFrom(field.getType())
    ...
2 голосов
/ 08 декабря 2011

Использование метода getType()

Field field =  ...;
if ( Collection.class.isAssignableFrom( field.getType() ) ){
  //do something with your collection
}
1 голос
/ 08 декабря 2011

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

 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");
 }
0 голосов
/ 08 декабря 2011

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

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

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

0 голосов
/ 08 декабря 2011
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 коллекцию, тогда все будет иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...