ヌルを返すすべてのゲッターを見つける方法
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. ゲッターメソッドの呼び出し
Introspectorを使用してCustomerクラスを分析します。これにより、ターゲットクラスでサポートされているプロパティ、イベント、およびメソッドを簡単に見つけることができます。
まず、CustomerクラスのすべてのPropertyDescriptorインスタンスを収集します。 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述語は、プロパティを読み取ることができるかどうかをチェックして、ゲッターを呼び出し、null値のみをフィルター処理します。
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インスタンスをうまく利用して、すべてのゲッターを呼び出し、nullプロパティのリストを取得しました.
いつものように、コードはover on GitHubで利用できます。