Рубрики
Без рубрики

Как найти все Геттеры, возвращающие Null

Узнайте, как узнать все геттеры, возвращающие нуль, с помощью Java 8 и класса Introspector.

Автор оригинала: baeldung.

1. Обзор

В этой краткой статье мы будем использовать потоковый API Java 8 и класс Introspector – для вызова всех геттеров, найденных в POJO.

Мы создадим поток желобов, проверим возвращаемые значения и посмотрим, является ли значение поля null.

2. Настройка

Единственная настройка, которая нам нужна, – это создать простой класс POJO:

public class Customer {

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

    // standard getters and setters
}

3. Вызов Методов Геттера

Мы проанализируем класс Customer с помощью Introspector ; это обеспечивает простой способ обнаружения свойств, событий и методов, поддерживаемых целевым классом.

Сначала мы соберем все экземпляры PropertyDescriptor нашего класса Customer . PropertyDescriptor захватывает всю информацию о свойстве JavaBean:

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

Теперь давайте рассмотрим все экземпляры PropertyDescriptor и вызовем метод read для каждого свойства:

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

Предикат nulls , который мы используем выше, проверяет, можно ли прочитать свойство, вызывает геттер и фильтрует только нулевые значения:

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

Наконец, давайте теперь создадим экземпляр Customer , установим несколько свойств равными нулю и протестируем нашу реализацию:

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

4. Заключение

В этом коротком уроке мы хорошо использовали потоковый API Java 8 и экземпляр Introspector – для вызова всех геттеров и получения списка нулевых свойств .

Как обычно, код доступен на GitHub .