Comment trouver tous les Getters qui retournent Null

Comment trouver tous les Getters revenant à zéro

1. Vue d'ensemble

Dans cet article rapide, nous utiliserons l'API Java 8 Stream et la classeIntrospector - 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 estnull.

2. Installer

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 classeCustomer en utilisantIntrospector; 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 instancesPropertyDescriptor de notre classeCustomer. 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 dePropertyDescriptor 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édicatnulls 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 deCustomer, 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 instanceIntrospector - pour appeler tous les getters et récupérer une liste de propriétés nulles.

Comme d'habitude, le code est disponibleover on GitHub.