passer une méthode en paramètre ?

passer une méthode en paramètre ? - Java - Programmation

Marsh Posté le 07-03-2003 à 16:02:48    

est-ce possible en java ?
 
je voudrais faire quelque chose du genre
 

Code :
  1. public void fonction(Method method, String[] params){
  2.    method(params);
  3. }


 
bien sûr si je cherche ça c'est pour un truc plus complexe que ce que je vous ai donné, mais c'est le principe :)
 
merci

Reply

Marsh Posté le 07-03-2003 à 16:02:48   

Reply

Marsh Posté le 07-03-2003 à 16:05:08    

Tu peux pas passer de méthode directement, il faut passer par une classe
Une moyen propre de le faire est de créer une interface, contenant la méthode à implanter
Ensuite, tu fais une classes implémentant l'interface, et tu passes cette classe en paramètre
 

Reply

Marsh Posté le 07-03-2003 à 16:14:05    

noldor a écrit :

Tu peux pas passer de méthode directement, il faut passer par une classe
Une moyen propre de le faire est de créer une interface, contenant la méthode à implanter
Ensuite, tu fais une classes implémentant l'interface, et tu passes cette classe en paramètre


 
Hé ouais, ça serait pas très "Objet" de passer juste une méthode en paramètre.

Reply

Marsh Posté le 07-03-2003 à 16:17:18    

noldor a écrit :

Tu peux pas passer de méthode directement, il faut passer par une classe
Une moyen propre de le faire est de créer une interface, contenant la méthode à implanter
Ensuite, tu fais une classes implémentant l'interface, et tu passes cette classe en paramètre
 
 

ie un functor
et le Design Pattern associé: Stratégie


Message édité par Taz le 07-03-2003 à 17:01:25
Reply

Marsh Posté le 07-03-2003 à 16:23:11    

El_gringo a écrit :


 
Hé ouais, ça serait pas très "Objet" de passer juste une méthode en paramètre.

ça serait quand même pratique parfois

Reply

Marsh Posté le 07-03-2003 à 16:53:14    

noldor a écrit :

ça serait quand même pratique parfois


 
tout à fait :)
je vous donne mon exemple...
j'ai un panel qui gère les 3 boutons de souris différemment
plutôt que de créer 3 popup, je voudrais utiliser le même (car ils contiennent les même données) mais faire en sorte qu'ils appellent 3 méthodes différentes.
 
une autre solution aurait été de créer un popup bloquant (comme un JOptionPane.swhoMessageDialog), mais j'ai pas trouvé comment faire :(
 
merci de vos réponses :jap:

Reply

Marsh Posté le 07-03-2003 à 16:57:44    

On peut passer des méthodes en paramètres. La solution de l'interface est evidement beaucoup plus adaptée la plupart du temps, mais c'est possible.
 

Code :
  1. //etape 1 : recuperation de la methode
  2. Class maClass = monObjet.getClass()
  3. Object[] mesParamsTypes = new Object[0];
  4. Method maMethode = maClass.getDeclaredMethod("maMethode", mesParamsTypes);
  5. //etape 2 : appel
  6. Object[] mesParams = new Object[0];
  7. maMethode.invoke(monObjet, mesParams);


 
Edit: erreur de copié coller


Message édité par lorill le 07-03-2003 à 16:58:15
Reply

Marsh Posté le 07-03-2003 à 17:04:06    

lorill a écrit :

On peut passer des méthodes en paramètres. La solution de l'interface est evidement beaucoup plus adaptée la plupart du temps, mais c'est possible.
 

Code :
  1. //etape 1 : recuperation de la methode
  2. Class maClass = monObjet.getClass()
  3. Object[] mesParamsTypes = new Object[0];
  4. Method maMethode = maClass.getDeclaredMethod("maMethode", mesParamsTypes);
  5. //etape 2 : appel
  6. Object[] mesParams = new Object[0];
  7. maMethode.invoke(monObjet, mesParams);


 
Edit: erreur de copié coller

Ah en effet, j'avais pas pensé à ce genre de manip !
Mais c'est quand même bien lourd par rapport à un pointeur de fonction en C (OK, je compare ce qui n'est pas comparable)

Reply

Marsh Posté le 07-03-2003 à 17:08:36    

Justement, est-ce vraiment lent ?
c'est pas trop lourd à votre avis de faire cette manip à chaque fois que je lance le popup ? (ça peut être très fréquent)
vaut-il vraiment mieux implémenter 3 popup différents ?
y'a-t-il une méthode pour faire un popup bloquant ? ça simplifierait pas mal...

Reply

Marsh Posté le 07-03-2003 à 17:48:50    

Pourquoi tu ne pourrais pas définir une interface définissant le prototype de ta fameuse fonction, et 3 classes qui définissent les 3 implémentations différentes de ta fonction ? Tu éviterais tout ce code réflexif, et ce serait beaucoup plus efficace tout en était beaucoup plus clair au niveau de ton source...

Reply

Marsh Posté le 07-03-2003 à 17:48:50   

Reply

Marsh Posté le 07-03-2003 à 17:51:08    

BifaceMcLeOD a écrit :

Pourquoi tu ne pourrais pas définir une interface définissant le prototype de ta fameuse fonction, et 3 classes qui définissent les 3 implémentations différentes de ta fonction ? Tu éviterais tout ce code réflexif, et ce serait beaucoup plus efficace tout en était beaucoup plus clair au niveau de ton source...


 
je sais, je pourrais tout aussi bien dériver 3 fois JMenuItem... Mais bon... j'ai trouvé une solution, peut être pas très "objet", mais plus rapide...

Reply

Marsh Posté le 07-03-2003 à 17:52:53    

noldor a écrit :

ça serait quand même pratique parfois


 
C'est surtout une vraie expression lambda qui serait pratique, parce que écrire une méthode pour un boute de code d'une ligne qui sera utilisé une fois c'est un peu lourd.

Reply

Marsh Posté le 07-03-2003 à 18:07:19    

mais ca coute rien une interface, et c'est la "bonne" façon de faire ce que tu veux !
 
Tu peux faire une interface non-public (dans le même fichier) ...

Reply

Marsh Posté le 07-03-2003 à 19:00:02    

Predicator a écrit :


 
tout à fait :)
je vous donne mon exemple...
j'ai un panel qui gère les 3 boutons de souris différemment
plutôt que de créer 3 popup, je voudrais utiliser le même (car ils contiennent les même données) mais faire en sorte qu'ils appellent 3 méthodes différentes.
 
une autre solution aurait été de créer un popup bloquant (comme un JOptionPane.swhoMessageDialog), mais j'ai pas trouvé comment faire :(
 
merci de vos réponses :jap:  


Pour l'histoire de passage de méthode, j'ai pas grand chose a rajouter ...
En revanche pour ton pb de popup bloquant, la sol que j'avais trouve etait de faire un JDialod undecorated modal ...


---------------
get amaroK plugin
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed