Как найти всех получателей, возвращающих ноль
1. обзор
В этой быстрой статье мы будем использовать Java 8 Stream API и класс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 захватывает всю информацию о свойстве Java Bean:
PropertyDescriptor[] propDescArr = Introspector
.getBeanInfo(Customer.class, Object.class)
.getPropertyDescriptors();
Теперь пройдемся по всем экземплярамPropertyDescriptor и вызовем метод чтения для каждого свойства:
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, установим для нескольких свойств значение null и протестируем нашу реализацию:
@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. Заключение
В этом коротком руководстве мы хорошо использовали Java 8 Stream API и экземплярIntrospector - чтобы вызвать все геттеры и получить список нулевых свойств.
Как обычно, доступен кодover on GitHub.