Comment trouver tous les Getters retournant Null

1. Vue d'ensemble

Dans cet article rapide, nous utiliserons l'API Java 8 Stream et la classe Introspector - pour appeler tous les getters trouvés dans un POJO.

Nous allons créer un flux de getters, inspecter les valeurs de retour et voir si une valeur de champ est nulle.

2. Configuration

La seule configuration dont nous avons besoin est de créer une classe POJO simple:

public class Customer { private Integer id; private String name; private String emailId; private Long phoneNumber; // standard getters and setters }

3. Appel des méthodes Getter

Nous analyserons la classe Customer en utilisant Introspector ; cela fournit un moyen simple de découvrir les propriétés, les événements et les méthodes pris en charge par une classe cible.

Nous allons d'abord collecter toutes les instances PropertyDescriptor de notre classe Customer . PropertyDescriptor capture toutes les informations d'une propriété Java Bean:

PropertyDescriptor[] propDescArr = Introspector .getBeanInfo(Customer.class, Object.class) .getPropertyDescriptors(); 

Passons maintenant en revue toutes les instances de PropertyDescriptor et appelons la méthode de lecture pour chaque propriété:

return Arrays.stream(propDescArr) .filter(nulls(customer)) .map(PropertyDescriptor::getName) .collect(Collectors.toList()); 

Le prédicat nul que nous utilisons ci-dessus vérifie si la propriété peut être lue, appelle le getter et ne filtre que les valeurs nulles:

private static Predicate nulls(Customer customer) { return = pd -> { Method getterMethod = pd.getReadMethod(); boolean result = false; return (getterMethod != null && getterMethod.invoke(customer) == null); }; } 

Enfin, créons maintenant une instance d'un client , définissons quelques propriétés sur null et testons notre implémentation:

@Test public void givenCustomer_whenAFieldIsNull_thenFieldNameInResult() { Customer customer = new Customer(1, "John", null, null); List result = Utils.getNullPropertiesList(customer); List expectedFieldNames = Arrays .asList("emailId","phoneNumber"); assertTrue(result.size() == expectedFieldNames.size()); assertTrue(result.containsAll(expectedFieldNames)); }

4. Conclusion

Dans ce court didacticiel, nous avons fait bon usage de l'API Java 8 Stream et d'une instance Introspector - pour appeler tous les getters et récupérer une liste de propriétés nulles .

Comme d'habitude, le code est disponible sur sur GitHub.