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.