Um zu sehen, ob eine Klasse eine Eigenschaft hat, ohne Ausnahme zu verlassen, können Sie diese Methoden verwenden:
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;
}
Und rufen Sie einfach an:
objectHasProperty(objInstance, "myPropertyName");
In der Tat nicht die Instanz der Klasse ist egal, ob die Klasse die Eigenschaft hat, aber ich habe auf diese Weise, nur wenig freundlicher zu sein. Zum Schluss: Ich habe die getAllFields rekursiv, um alle Superklassen-Methoden zu bekommen (in meinem Fall ist das wichtig)
Danach, wenn Sie sehen wollen, was ist der Wert der Eigenschaft in der gewünschten Objekt, können Sie einfach anrufen:
PropertyUtils.getProperty(objInstance, "myPropertyName");
Denken Sie daran: wenn objInstance
die diese Eigenschaft nicht hat, über den Anruf NoSuchMethodException
werfen (das ist, warum Sie die Faust Code verwenden müssen, um zu sehen, ob die Klasse die Eigenschaft hat)
Mehr Detail würde wirklich helfen, zu antworten. Codebeispiel vielleicht? – Erwald