So finden Sie alle Getter, die Null zurückgeben

So finden Sie alle Getters, die Null zurückgeben

1. Überblick

In diesem kurzen Artikel verwenden wir die Java 8 Stream-API und dieIntrospector-Klasse, um alle in einem POJO gefundenen Getter aufzurufen.

Wir werden einen Strom von Gettern erstellen, Rückgabewerte untersuchen und feststellen, ob ein Feldwertnull. ist

2. Konfiguration

Das einzige Setup, das wir brauchen, ist das Erstellen einer einfachen POJO-Klasse:

public class Customer {

    private Integer id;
    private String name;
    private String emailId;
    private Long phoneNumber;

    // standard getters and setters
}

3. Aufrufen von Getter-Methoden

Wir analysieren dieCustomer-Klasse mitIntrospector. Dies bietet eine einfache Möglichkeit, Eigenschaften, Ereignisse und Methoden zu ermitteln, die von einer Zielklasse unterstützt werden.

Wir werden zuerst allePropertyDescriptor-Instanzen unsererCustomer-Klasse erfassen. PropertyDescriptor erfasst alle Informationen einer Java Bean-Eigenschaft:

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

Lassen Sie uns nun allePropertyDescriptor-Instanzen durchgehen und die Lesemethode für jede Eigenschaft aufrufen:

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

Das oben verwendete Prädikatnulls prüft, ob die Eigenschaft gelesen werden kann, ruft den Getter auf und filtert nur Nullwerte:

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

Lassen Sie uns abschließend eine Instanz vonCustomer erstellen, einige Eigenschaften auf null setzen und unsere Implementierung testen:

@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. Fazit

In diesem kurzen Tutorial haben wir die Java 8 Stream-API und eineIntrospector-Instanz gut genutzt, um alle Getter aufzurufen und eine Liste der Null-Eigenschaften. abzurufen

Wie üblich ist der Codeover on GitHub verfügbar.