web-dev-qa-db-fra.com

Comment invoquer une méthode getter par son nom?

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?

11
user3663882

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.

45
Pshemo

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é !!

5
AnirbanDebnath