per vedere se una classe ha una proprietà, senza fare affidamento su eccezioni, è possibile utilizzare questi metodi:
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;
}
E semplicemente chiamano:
objectHasProperty(objInstance, "myPropertyName");
In realtà non importa l'istanza della classe per vedere se la classe ha la proprietà, ma ho fatto in questo modo, solo per essere poco più amichevole. Giusto per concludere: ho fatto le getAllFields per essere ricorsiva, per ottenere tutti i metodi di superclassi troppo (nel mio caso questo è importante)
Dopo di che, se si vuole vedere qual è il valore della proprietà nella desiderata oggetto, si può chiamare:
PropertyUtils.getProperty(objInstance, "myPropertyName");
Ricordate: se objInstance
non ha quella proprietà, la chiamata sopra getterà NoSuchMethodException
(Ecco perché è necessario utilizzare il codice pugno per vedere se la classe ha la proprietà)
fonte
2014-08-27 12:06:01
Ulteriori dettagli sarebbero davvero utili per rispondere. Esempio di codice forse? – Erwald