Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1604 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  passer une méthode en paramètre ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

passer une méthode en paramètre ?

n°326117
Predicator
Posté le 07-03-2003 à 16:02:48  profilanswer
 

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

mood
Publicité
Posté le 07-03-2003 à 16:02:48  profilanswer
 

n°326122
noldor
Rockn'roll
Posté le 07-03-2003 à 16:05:08  profilanswer
 

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
 

n°326131
El_gringo
Posté le 07-03-2003 à 16:14:05  profilanswer
 

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.

n°326134
Taz
bisounours-codeur
Posté le 07-03-2003 à 16:17:18  profilanswer
 

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
n°326142
noldor
Rockn'roll
Posté le 07-03-2003 à 16:23:11  profilanswer
 

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

n°326181
Predicator
Posté le 07-03-2003 à 16:53:14  profilanswer
 

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:

n°326183
lorill
Posté le 07-03-2003 à 16:57:44  profilanswer
 

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
n°326191
noldor
Rockn'roll
Posté le 07-03-2003 à 17:04:06  profilanswer
 

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)

n°326194
Predicator
Posté le 07-03-2003 à 17:08:36  profilanswer
 

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...

n°326238
BifaceMcLe​OD
The HighGlandeur
Posté le 07-03-2003 à 17:48:50  profilanswer
 

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...

mood
Publicité
Posté le 07-03-2003 à 17:48:50  profilanswer
 

n°326243
Predicator
Posté le 07-03-2003 à 17:51:08  profilanswer
 

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...

n°326246
nraynaud
lol
Posté le 07-03-2003 à 17:52:53  profilanswer
 

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.

n°326257
benou
Posté le 07-03-2003 à 18:07:19  profilanswer
 

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) ...

n°326295
bobuse
Posté le 07-03-2003 à 19:00:02  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  passer une méthode en paramètre ?

 

Sujets relatifs
Methode simple pour savoir si une commande php est dispo...Méthode GET sans LWP::Simple [résolu]
Php/javascript : problème de passage de paramètre par URLjeu de la vie en java, nouveau probleme avec une methode
[ PHP ] passer un jpg en noir et blanc[PHP]Passer un tableau en parametre à l'URL
[Borland C++ Builder 6] Déclarer BD Access, sans passer par l'ODBC WinTransmission paramètre
Passer une variable d'une fenêtre à une autrepeut on passer une methode en parametre ?
Plus de sujets relatifs à : passer une méthode en paramètre ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR