Sådan finder du alle Getters, der vender tilbage Null

1. Oversigt

I denne hurtige artikel bruger vi Java 8 Stream API og Introspektor klasse - for at påkalde alle getters fundet i en POJO.

Vi opretter en strøm af getters, inspicerer returværdier og ser, om en feltværdi er nul.

2. Opsætning

Den eneste opsætning, vi har brug for, er at oprette en simpel POJO-klasse:

offentlig klasse kunde {privat heltal id; privat strengnavn; privat streng e-mail-id; privat Langt telefonnummer; // standard getters og setter}

3. Påberåbe sig Getter-metoder

Vi analyserer Kunde klasse ved hjælp af Introspektor; dette giver en nem måde at finde egenskaber, begivenheder og metoder understøttet af en målklasse.

Vi samler først alle de PropertyDescriptor tilfælde af vores Kunde klasse. PropertyDescriptor registrerer al info om en Java Bean-ejendom:

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

Lad os nu gå over alt PropertyDescriptor forekomster og påberåbe sig læsemetoden for hver egenskab:

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

Det nul predikat, vi bruger ovenstående kontroller, hvis ejendommen kan læses, påberåber getter og filtrerer kun nulværdier:

private static Predicate nulls (Kundekunde) {return = pd -> {Method getterMethod = pd.getReadMethod (); boolsk resultat = falsk; returner (getterMethod! = null && getterMethod.invoke (kunde) == null); }; } 

Endelig, lad os nu oprette en forekomst af en Kunde, sæt et par egenskaber til null og test vores implementering:

@Test offentligt ugyldigt givenCustomer_whenAFieldIsNull_thenFieldNameInResult () {Kundekunde = ny kunde (1, "John", null, null); Listeresultat = Utils.getNullPropertiesList (kunde); Liste forventetFieldNames = Arrays .asList ("emailId", "phoneNumber"); assertTrue (result.size () == forventetFieldNames.size ()); assertTrue (result.containsAll (expectedFieldNames)); }

4. Konklusion

I denne korte vejledning brugte vi god brug af Java 8 Stream API og en Introspektor instans - for at påkalde alle getters og hente en liste over null-egenskaber.

Som sædvanlig er koden tilgængelig på GitHub.