1概要

このクイック記事では、Java 8 Stream APIとhttps://docs.oracle.com/javase/7/docs/api/java/beans/Introspector.html[

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ゲッターメソッドの呼び出し


Introspector

を使用して

Customer

クラスを分析します。これにより、ターゲットクラスでサポートされているプロパティ、イベント、およびメソッドを簡単に見つけることができます。

まず、

Customer

クラスのすべての

PropertyDescriptor

インスタンスを収集します。

PropertyDescriptor

は、Java Beanプロパティのすべての情報を取得します。

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

述部は、プロパティーが読み取り可能かどうかを調べて、getterを呼び出し、NULL値のみをフィルター処理します。

private static Predicate<PropertyDescriptor> 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<String> result = Utils.getNullPropertiesList(customer);
    List<String> expectedFieldNames = Arrays
      .asList("emailId","phoneNumber");

    assertTrue(result.size() == expectedFieldNames.size());
    assertTrue(result.containsAll(expectedFieldNames));
}


4結論

この短いチュートリアルでは、すべてのゲッターを呼び出してnullプロパティのリストを取得するために、Java 8 Stream APIと

Introspector

インスタンスを活用しました

いつものように、このコードはhttps://github.com/eugenp/tutorials/tree/master/core-java[GitHubで利用可能]です。