Para ver si una clase tiene una propiedad sin depender de excepción, puede utilizar estos métodos:
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;
}
y simplemente llaman:
objectHasProperty(objInstance, "myPropertyName");
de hecho no importa la instancia de la clase para ver si la clase tiene la propiedad, pero lo hizo de esa manera, sólo para estar poco más amable. Solo para concluir: hice que getAllFields sea recursivo, para obtener todos los métodos de superclases también (en mi caso esto es importante)
Después de eso, si quiere ver cuál es el valor de la propiedad en el deseado objeto, sólo puede llamar a:
PropertyUtils.getProperty(objInstance, "myPropertyName");
Recuerde: si objInstance
no tiene esa propiedad, la llamada anterior tirará NoSuchMethodException
(Por eso es necesario utilizar el código puño para ver si la clase tiene la propiedad)
Más detalles realmente ayudaría a responder. Ejemplo de código tal vez? – Erwald