J'ai la classe de bean suivante:
public class A{
private String field;
public String getField() {
return field;
}
private String setField(String field) {
this.field = field;
}
}
Et la classe suivante:
public class B{
public static void main(String[] args){
A a = new A();
//do stuff
String f = //get a's field value
}
}
Comment puis-je obtenir la valeur retournée par le getter d'un objet particulier de class A
? Bien sûr, je peux invoquer la méthode avec Method.invoke(Object obj, Object... args)
mais je ne voudrais pas écrire le préfixe "get"
Manuellement. Est-il possible d'éviter cela?
Que diriez-vous d'utiliser Java.beans.PropertyDescriptor
Object f = new PropertyDescriptor("field", A.class).getReadMethod().invoke(a);
ou version un peu plus longue (qui fait exactement la même chose que la précédente)
PropertyDescriptor pd = new PropertyDescriptor("field", A.class);
Method getter = pd.getReadMethod();
Object f = getter.invoke(a);
PropertyDescriptor
nous permet de faire beaucoup de choses, par exemple son getReadMethod()
Obtient la méthode qui doit être utilisée pour lire la valeur de la propriété.
Nous pouvons donc obtenir une instance de Java.reflect.Method
Représentant getter pour field
. Il ne nous reste plus qu'à l'invoquer sur le bean dont nous voulons obtenir le résultat.
Un autre moyen simple consiste à utiliser la réflexion de base Java.
Method fieldGetter = A.getClass().getMethod("getField");
String f = fieldGetter.invoke(A).toString();
Aussi simple que cela. À votre santé !!