Hogyan lehet megtalálni az összes Null visszatérő gettert

1. Áttekintés

Ebben a rövid cikkben a Java 8 Stream API-t és a Introspektor osztály - a POJO-ban található összes getter meghívása.

Létrehozunk egy gettersorozatot, megvizsgáljuk a visszatérési értékeket, és megnézzük, hogy a mező értéke-e nulla.

2. Beállítás

Az egyetlen beállítás, amire szükségünk van, egy egyszerű POJO osztály létrehozása:

public class ügyfél {private Integer id; privát karakterlánc neve; private String emailId; privát Hosszú telefonszám; // szabványos mérőeszközök és beállítók}

3. Getter-módszerek meghívása

Elemezzük a Vevő osztály felhasználásával Introspektor; ez egyszerű módot kínál a célosztály által támogatott tulajdonságok, események és módszerek felfedezésére.

Először összegyűjtjük az összes PropertyDescriptor eseteink Vevő osztály. PropertyDescriptor rögzíti a Java Bean tulajdonság összes információját:

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

Most menjünk át mindenen PropertyDescriptor példányokat, és hívja meg az olvasási metódust minden tulajdonságra:

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

A nullák predikátum, amelyet a fenti ellenőrzések során használunk, ha a tulajdonság olvasható, meghívja a getter-t és csak null értékeket szűr le:

privát statikus Predicate nulls (Ügyfél ügyfél) {return = pd -> {Method getterMethod = pd.getReadMethod (); logikai eredmény = hamis; return (getterMethod! = null && getterMethod.invoke (ügyfél) == null); }; } 

Végül hozzunk létre egy példányt a Vevő, állítson néhány tulajdonságot nullára és tesztelje megvalósításunkat:

@Test public void givenCustomer_whenAFieldIsNull_thenFieldNameInResult () {Ügyfél ügyfél = új Ügyfél (1, "John", null, null); Lista eredménye = Utils.getNullPropertiesList (ügyfél); List várhatóFieldNames = Tömbök .asList ("emailId", "telefonszám"); assertTrue (eredmény.méret () == várható mezőnév.méret ()); assertTrue (result.containsAll (várható Mezőnév)); }

4. Következtetés

Ebben a rövid bemutatóban jól használtuk a Java 8 Stream API-t és az an Introspektor példány - az összes getter meghívása és a null tulajdonságok listájának lekérése.

Szokás szerint a kód elérhető a GitHubon.