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.
if (Collection.class.isAssignableFrom(field.getType())) {
}
Vous devriez utiliser Class.isAssignableFrom
:
if (Collection.class.isAssignableFrom(field.getType())
...
Utilisation de la méthode getType()
Field field = ...;
if ( Collection.class.isAssignableFrom( field.getType() ) ){
//do something with your collection
}
// 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");
}
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.
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
.