2 votes

Question sur la réflexion en java

J'essaie de résoudre le problème suivant en réflexion. J'ai un POJO qui agit en quelque sorte comme une métadonnée pour la signature de la méthode dans la classe TestResponse. TestResponse a une méthode setDate() qui prend un paramètre Date. J'essaie d'en faire un code générique qui peut accepter n'importe quelle méthode et sa signature pour l'intégrer dans la réponse. Ce que je n'arrive pas à comprendre, c'est comment définir la classe de paramètres tout en appelant getMethod() en fonction de l'entrée. L'entrée me dit de définir le paramètre comme Date, mais je ne suis pas sûr de savoir comment y parvenir.

Voici mon exemple de code. Bien sûr, le mdi.modifier.getClass() n'est pas correct puisqu'il va obtenir String.class au lieu de Date.class.

TestResponse response = new TestResponse();
Object val = "test";
MDIBase mdi = new MDIBase("setDate", "Date");
Method m = response.getClass().getMethod(mdi.method, mdi.modifier.getClass());
m.invoke(response, new Object[] { val });

Voici MDIBase

public class MDIBase {
public String method;
public String modifier;
public MDIBase(String method, String modifier){
this.method = method;
this.modifier = modifier;
}

Toute indication sera très appréciée.

Merci

3voto

Chris Thompson Points 18375

Je ne suis pas sûr d'avoir bien compris, mais si c'est le cas, vous voulez être en mesure de passer un nom de classe pour le paramètre ?

Pour ce faire, au lieu de passer dans "Date", passez dans "java.util.Date" (ceci est connu comme le nom de classe entièrement qualifié) et ensuite au lieu de getClass appelez

response.getClass().getMethod(mdi.method, Class.forName(mdi.modifier));

Cela chargera dynamiquement la classe qui a le nom entièrement qualifié que vous avez fourni.

C'est ce que vous cherchez ? Si ce n'est pas le cas, donnez-moi plus d'informations et j'essaierai à nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X