Je sens qu'il me manque quelque chose quand il s'agit de langages statiquement typés. Quand je n'utilisais presque que perl, il y avait plusieurs façons de dire à un objet quelle fonction appeler.Passer une référence de méthode à un constructeur d'objets
Maintenant que je suis en Java, je ne vois pas comment je peux faire quelque chose de similaire dans un fasion facile
J'ai une classe Button
générique. Ceci est sous-classé par tous les boutons réels qui seront utilisés: Chacun avec une méthode différente à appeler lorsqu'on clique dessus.
Est-ce qu'il n'y a vraiment aucun moyen de passer une référence à une méthode à appeler lorsqu'on clique dessus, de sorte que je puisse utiliser une classe pour tous les boutons?
À l'heure actuelle, je crée des boutons comme ceci:
// Specifically using the subclass that sets "firemode" to "close"
FiremodeClose fc = new FiremodeClose(Settings.ui_panel_start, Settings.ui_panel_row_firemode, game);
painter.addSelectionButton(fc);
clickTracker.addSelectionButton(fc);
Cette ofcourse couses une myriade de sous-classes, chacun différant seulement dans le placement, l'étiquette/graphiques et appel de méthode. Il est plus logique de faire quelque chose de similaire à ceci:
// Generic button, the method that sets "firemode" is somehow passed as arguement to the contsructor.
Button fc = new Button(&referenceToFunctionToCallWhenClicked, otherArguementsEtc);
painter.addSelectionButton(fc);
clickTracker.addSelectionButton(fc);
Comme je l'ai dit, je sens que je dois manquer quelque chose, car il est logique qu'il devrait y avoir un moyen d'y parvenir, ainsi me laisser s'en tirer une seule classe Button
sans aucune sous-classe.
C'est à quoi sert une interface. Java 8 et Groovy implémentent des implémentations d'interface en ligne pour des cas d'utilisation comme celui-ci. – chrylis
^^^ Cela, et voir aussi les classes anonymes. –
@chrylis Si c'est ce que sont les interfaces, alors je dois les utiliser pour autre chose que leur but. J'aimerais voir une réponse impliquant des exemples de code pour cela. – Jarmund