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.


$config[zx-auto] not found$config[zx-overlay] not found