Java >> Java tutorial >  >> Tag >> return

Sådan finder du alle Getters Returning Null

1. Oversigt

I denne hurtige artikel bruger vi Java 8 Stream API og Introspector klasse – for at påkalde alle gettere fundet i en POJO.

Vi vil oprette en strøm af gettere, inspicere returværdier og se, om en feltværdi er nul.

2. Opsætning

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

public class Customer {

    private Integer id;
    private String name;
    private String emailId;
    private Long phoneNumber;

    // standard getters and setters
}

3. Påberåber Getter-metoder

Vi analyserer Kunden klasse ved hjælp af Introspector; dette giver en nem måde at opdage egenskaber, begivenheder og metoder, der understøttes af en målklasse.

Vi samler først alle PropertyDescriptor forekomster af vores kunde klasse. PropertyDescriptor fanger al information om en Java Bean-ejendom:

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

Lad os nu gennemgå alle PropertyDescriptor instanser, og påkald læsemetoden for hver egenskab:

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

nullerne prædikatet, vi bruger ovenstående kontrollerer, om egenskaben kan læses, påkalder getteren og filtrerer kun null-værdier:

private static Predicate<PropertyDescriptor> nulls(Customer customer) { 
    return = pd -> { 
        Method getterMethod = pd.getReadMethod(); 
        boolean result = false; 
        return (getterMethod != null && getterMethod.invoke(customer) == null); 
    }; 
}

Lad os endelig nu oprette en forekomst af en Kunde , sæt nogle få egenskaber til at nulstille og teste vores implementering:

@Test
public void givenCustomer_whenAFieldIsNull_thenFieldNameInResult() {
    Customer customer = new Customer(1, "John", null, null);
	    
    List<String> result = Utils.getNullPropertiesList(customer);
    List<String> expectedFieldNames = Arrays
      .asList("emailId","phoneNumber");
	    
    assertTrue(result.size() == expectedFieldNames.size());
    assertTrue(result.containsAll(expectedFieldNames));      
}

4. Konklusion

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

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


Java tag