Kako pronaći sve vratioce koji se vraćaju null
1. Pregled
U ovom ćemo kratkom članku koristiti Java 8 Stream API i Introspektor klasa - za pozivanje svih getera pronađenih u POJO-u.
Stvorit ćemo tok getera, pregledati povratne vrijednosti i vidjeti je li vrijednost polja null.
2. Postavljanje
Jedino što nam treba je stvaranje jednostavne POJO klase:
kupac javne klase {private Integer id; privatni naziv niza; privatni niz emailId; privatni Long phoneBroj; // standardni geteri i postavljači}
3. Pozivanje metoda Getter
Analizirat ćemo Kupac razred koristeći Introspektor; ovo pruža jednostavan način za otkrivanje svojstava, događaja i metoda podržanih ciljnom klasom.
Prvo ćemo prikupiti sve PropertyDescriptor primjeri naših Kupac razred. PropertyDescriptor bilježi sve podatke o svojstvu Java Bean:
PropertyDescriptor [] propDescArr = Introspector .getBeanInfo (Customer.class, Object.class) .getPropertyDescriptors ();
Krenimo sada preko svega PropertyDescriptor instance i pozovite metodu čitanja za svako svojstvo:
vratiti Arrays.stream (propDescArr) .filter (nulls (kupac)) .map (PropertyDescriptor :: getName) .collect (Collectors.toList ());
The nula predikat koji koristimo gore provjerava može li se svojstvo čitati poziva getera i filtrira samo null vrijednosti:
privatne statičke nule predikata (kupac kupac) {return = pd -> {Metoda getterMethod = pd.getReadMethod (); logički rezultat = lažno; return (getterMethod! = null && getterMethod.invoke (kupac) == null); }; }
Napokon, kreirajmo sada primjerak Kupac, postavite nekoliko svojstava na nulu i testirajte našu implementaciju:
@Test javna praznina givenCustomer_whenAFieldIsNull_thenFieldNameInResult () {Kupac kupac = novi kupac (1, "John", null, null); Rezultat popisa = Utils.getNullPropertiesList (kupac); Popis očekivanihFieldNames = Nizovi .asList ("emailId", "phoneNumber"); assertTrue (rezultat.size () == očekivanaPoljaName.size ()); assertTrue (rezultat.sadržiAll (očekivanaPoljaName)); }
4. Zaključak
U ovom kratkom vodiču dobro smo iskoristili Java 8 Stream API i Introspektor instanca - za pozivanje svih getera i dohvaćanje popisa nultih svojstava.
Kao i obično, kod je dostupan na GitHub-u.