Hoe alle getters te vinden die nul retourneren

1. Overzicht

In dit korte artikel gebruiken we de Java 8 Stream API en de Introspector class - om alle getters aan te roepen die in een POJO worden gevonden.

We zullen een stroom van getters creëren, retourwaarden inspecteren en kijken of een veldwaarde is nul.

2. Installatie

De enige setup die we nodig hebben, is om een ​​eenvoudige POJO-klasse te maken:

openbare klasse Klant {privé Geheel getal-id; private String naam; private String emailId; privé Lang telefoonnummer; // standaard getters en setters}

3. Het aanroepen van Getter-methoden

We analyseren de Klant klasse gebruiken Introspector; dit biedt een gemakkelijke manier om eigenschappen, gebeurtenissen en methoden te ontdekken die worden ondersteund door een doelklasse.

We verzamelen eerst alle PropertyDescriptor voorbeelden van onze Klant klasse. PropertyDescriptor vangt alle informatie van een Java Bean-eigenschap op:

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

Laten we nu alles bespreken PropertyDescriptor instanties, en roep de leesmethode aan voor elke eigenschap:

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

De nulls predikaat dat we hierboven gebruiken controleert of de eigenschap kan worden gelezen, roept de getter op en filtert alleen null-waarden:

privé statisch predikaat nulls (klant klant) {return = pd -> {Methode getterMethod = pd.getReadMethod (); booleaans resultaat = false; return (getterMethod! = null && getterMethod.invoke (klant) == null); }; } 

Laten we tot slot nu een instantie maken van een Klant, stel een paar eigenschappen in op null en test onze implementatie:

@Test openbare ongeldig gegevenCustomer_whenAFieldIsNull_thenFieldNameInResult () {Klant klant = nieuwe klant (1, "Jan", null, null); Lijstresultaat = Utils.getNullPropertiesList (klant); Lijst verwachteFieldNames = Arrays .asList ("emailId", "phoneNumber"); assertTrue (result.size () == verwachteFieldNames.size ()); assertTrue (result.containsAll (verwachteFieldNames)); }

4. Conclusie

In deze korte tutorial hebben we goed gebruik gemaakt van de Java 8 Stream API en een Introspector instantie - om alle getters aan te roepen en een lijst met null-eigenschappen op te halen.

Zoals gewoonlijk is de code beschikbaar op GitHub.