web-dev-qa-db-fra.com

Java: Comment vérifier si un champ est de type Java.util.Collection

J'ai une méthode utilitaire qui parcourt différentes classes et récupère les champs de manière récursive. Je veux vérifier si ce champ est une collection. Voici un exemple de code:

void myMethod(Class<?> classToCheck)

Field[] fields = classToCheck.getDeclaredFields();

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

}

Merci d'avance pour l'aide.

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

}
62
Bozho

Vous devriez utiliser Class.isAssignableFrom:

if (Collection.class.isAssignableFrom(field.getType())
    ...
8
Kirk Woll

Utilisation de la méthode getType()

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

// Cette exécution si

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

// Ceci exécute le reste

List<String> cashType = split(" ,AlL ");
 if(cashType instanceof Hashtable){
     System.out.println("cashType instanceof Collection");
 }else{
     System.out.println("cashType is not instanceof Collection");
 }
1
Suresh Arora
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
    }
}

Ceci teste si l'objet réel référencé par le champ 'champ' (de l'objet classInstance) implémente Collection. Si vous voulez tester si le type déclaré de Field implémente Collection, ce sera différent.

0
DJClayworth

Vous pouvez utiliser getType() de la manière suivante:

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

Cela ne fonctionnera que si le champ est déclaré en tant que Collection. Cela ne fonctionnera pas si le champ est un sous-type de Collection, tel que List ou Vector.

0
ampersandre