TP 7 - Question 2 - Discussion

Programmation Avancée

Moderator: douinj

Post Reply
burckh_s
Posts: 20
Joined: 01 Nov 2021 16:13

TP 7 - Question 2 - Discussion

Post by burckh_s » 08 Dec 2021 2:22

Bonjour,

J'ai fais votre TP7 question 2 et j'ai validé tous les test :D.

Néanmoins, pour y arriver dans lierSourceEtListener, j'invoque toutes les méthodes addXXXListener et j'estime que si celle ci n'est pas associée au listener fournis en paramètre, cela envoie un IllegalArgumentException que je traite en faisant rien.

Est ce que c'est une bonne solution ?

Si un listener implémente plusieurs interfaces, on aura peut être plusieurs invocation d'un addXXXListener.

douinj
Posts: 462
Joined: 18 Mar 2009 15:46

Re: TP 7 - Question 2 - Discussion

Post by douinj » 08 Dec 2021 9:27

Bonjour,
Si un listener implémente plusieurs interfaces, on aura peut être plusieurs invocation d'un addXXXListener.
A vérifier, le compilateur devrait produire une erreur : implémentation ambiguë, la même méthode depuis deux interfaces différentes

à suivre

delaba_q
Posts: 26
Joined: 03 Oct 2021 0:47

Re: TP 7 - Question 2 - Discussion

Post by delaba_q » 08 Dec 2021 12:34

A vérifier, le compilateur devrait produire une erreur : implémentation ambiguë, la même méthode depuis deux interfaces différentes
Je ne sais pas à partir de quelle version de Java ce n'est plus une erreur de compilateur, ou même si ça l'a déjà été ; tant que la signature est identique, aucun problème.
EDIT : j'ai eu un doute, alors je suis allé vérifier par acquis de conscience, et je confirme, avec une explication et un exemple très clairs
Si un listener implémente plusieurs interfaces, on aura peut être plusieurs invocation d'un addXXXListener
J'ai pris le parti d'appeler toutes les méthodes addXXXListener, si dans la méthode delierSourceEtListener, j'implémente le comportement tout à fait inverse, et que j'appelle toutes les méthodes removeXXXListener correspondantes. Par contre, si aucune méthode ne correspond, c'est une erreur. C'est comme ça que j'ai perçu la question en tout cas...

douinj
Posts: 462
Joined: 18 Mar 2009 15:46

Re: TP 7 - Question 2 - Discussion

Post by douinj » 08 Dec 2021 21:28

Bonsoir,
Bonjour,
Si un listener implémente plusieurs interfaces, on aura peut être plusieurs invocation d'un addXXXListener.
A vérifier, le compilateur devrait produire une erreur : implémentation ambiguë, la même méthode depuis deux interfaces différentes
Vous avez raison, pas de souci pour deux interfaces avec la même méthode à implémenter,

bonne fin de tp

georg_c9
Posts: 81
Joined: 24 Oct 2021 18:14

Re: TP 7 - Question 2 - Discussion

Post by georg_c9 » 09 Dec 2021 21:22

Question de béotien : je vois que vous avez gérer avec des exceptions les appels aux méthodes.

Dans mon cas, lorsque je mets explicitement le nom de la méthode : addActionListener ou addMouseListener, j’obtiens le bon résultat à savoir l'ajout du listener à la source. Mais lorsque je sélectionne toutes les méthodes commencant par add et finissant par Listener, j'obtiens des arrêts avec des exceptions (ex: java.lang.NullPointerException) . Comment avez-vous géré ces exceptions ? J'ai essayé avec Try/Catch sans succès.

Merci pour vos précisions

delaba_q
Posts: 26
Joined: 03 Oct 2021 0:47

Re: TP 7 - Question 2 - Discussion

Post by delaba_q » 10 Dec 2021 14:13

Toutes les méthodes addXXXListener ne sont pas bonnes à prendre, il ne faut garder que celles qu'on peut vraiment appeler, par rapport au paramètre listener. Je n'en dis pas plus ;)

marti_r1
Posts: 66
Joined: 07 Oct 2021 20:16

Re: TP 7 - Question 2 - Discussion

Post by marti_r1 » 14 Dec 2021 14:22

Bonjour, je débute à l'instant la question 2, il me reste encore pas mal de chose à creuser pour vraiment bien tout comprendre, ce qui est , je trouve, l'intérêt principal du TP, car sinon je crois avoir "vaguement" compris à-peu-près certaines choses dans l'ensemble, et c'est uniquement quand je suis dedans que je me rends compte de toutes les questions que cela soulève, bref.
J'ai juste une question, voila, pour la question qui consiste à lier l'observer et l'observable :
D'abord j'écris la "signature" de la méthode, bon faut que je revois car il y a une histoire d'interface là, puis je "charge" la classe qui contient la méthode et je récupère cette méthode avec classe.getMethod("nom de la méthode d'intérêt, signature) appliqué sur classe, puis j’appelle invoke sur sur ma méthode récupérée avec pour paramètre l'objet sur lequel doit porter la méthode et ses paramètres, bref comme dans le cours.

Class<?> []signature=new Class[]{...};
Class<?> classe=Class.forName("...");
Method methode=classe.getMethod("...",signature);
Object []parametre=new Object[]{...};
methode.invoke(...,parametre);

Ça passe pour le test qui est dans la classe de test après ça veut pas dire que cela fonctionne car je n'ai pas encore soumis mais je verrai après.
Cependant quand je souhaite faire la même chose avec la méthode addXXXListener comme addActionListener par exemple, j'ai cherché dans la javadoc à quelle classe appartient cette méthode, impossible de la trouver du coup je ne peux pas faire : Class<?> classe=Class.forName("..."); car j'ai pas le nom de la classe dans laquelle on trouve addActionListner ?
Dans le cours 4, diapo 24, il est écrit addXXXListener puis plus haut java.awt.event.EventListener, mais j'ai cherché dans EventListener même EventObject, actionListener etc, etc... ! Pas trouvé la classe qui a cette méthode ?
Je vais relire, peut être que je ne suis pas sur la bonne voie.
Cordialement

Post Reply