クラスに例外に依存しないプロパティがあるかどうかを確認するには、次のメソッドを使用できます。
private Boolean objectHasProperty(Object obj, String propertyName){
List<Field> properties = getAllFields(obj);
for(Field field : properties){
if(field.getName().equalsIgnoreCase(propertyName)){
return true;
}
}
return false;
}
private static List<Field> getAllFields(Object obj){
List<Field> fields = new ArrayList<Field>();
getAllFieldsRecursive(fields, obj.getClass());
return fields;
}
private static List<Field> getAllFieldsRecursive(List<Field> fields, Class<?> type) {
for (Field field: type.getDeclaredFields()) {
fields.add(field);
}
if (type.getSuperclass() != null) {
fields = getAllFieldsRecursive(fields, type.getSuperclass());
}
return fields;
}
そして単に呼び出す:
objectHasProperty(objInstance, "myPropertyName");
実際には、クラスがプロパティを持っているかどうかを確認するためにクラスのインスタンスは関係ありませんが、もう少し親しみやすくするためにそのようにしました。結論として、getAllFields を再帰的に作成し、すべてのスーパークラス メソッドも取得しました (私の場合、これは重要です)。
その後、目的のオブジェクトのプロパティの値を確認したい場合は、次のように呼び出すだけです。
PropertyUtils.getProperty(objInstance, "myPropertyName");
覚えておいてください:objInstance
そのプロパティがない場合、上記の呼び出しはスローしNoSuchMethodException
ます(そのため、クラスにプロパティがあるかどうかを確認するために最初のコードを使用する必要があります)