TP7 question2 - pourquoi getClass ne fonctionne pas ?

Programmation Avancée

Modérateur : Douin

Nourdine

TP7 question2 - pourquoi getClass ne fonctionne pas ?

Message par Nourdine » 11 déc. 2017 15:26

J'ai un problème avec getClass() dans ma méthode lierSourceEtListener, il ne me donne pas la classe attendue.
Alors j'ai essayé de reproduire une partie du test de la méthode test_lierJButtonEtActionListener() de la question2.
J'instancie donc un JButton (jb) et un ActionListener (obs) et je demande ensuite l'affichage de leur classe avec getClass().
Mais la méthode getClass() ne marche que dans un seul cas (avec le JButton). Pourquoi ça ne marche pas avec l'ActionListener ?
Voici le code (je met tout ce code dans une classe Main):

Code : Tout sélectionner

   JButton jb = new JButton();
   ActionListener obs = new ActionListener(){
      public void actionPerformed(ActionEvent ae){
      }
   };

   System.out.println("Classe du JButton  : " + jb.getClass());
   System.out.println("Classe du listener  : " + obs.getClass());
   
Et voilà ce qui s'affiche sur la console :

Code : Tout sélectionner

Classe du JButton  : class javax.swing.JButton
Classe du listener  : class question2.Main$1
Je comprends le premier affichage : on affiche la classe du JButton donc class javax.swing.JButton.
Mais je ne comprends pas le second affichage. Pourquoi il me dit que la classe du listener est class question2.Main$1.

Je comprends mieux pourquoi le test de la méthode lierSourceEtListener ne passe pas, car la première chose que je fais dans la méthode lierSourceEtListener c'est de demander la classe du listener avec getClass(). Donc tout le reste ne fonctionnera pas.

J'attends une explication.

Merci.

pthellier
Messages : 29
Inscription : 10 oct. 2017 13:52

Re: TP7 question2 - pourquoi getClass ne fonctionne pas ?

Message par pthellier » 11 déc. 2017 16:26

Essaye avec getClass().getName() ?

Douin
Messages : 218
Inscription : 18 mars 2009 15:46

Re: TP7 question2 - pourquoi getClass ne fonctionne pas ?

Message par Douin » 11 déc. 2017 17:17

Bonjour elle fonctionne, c'est bien une classe anonyme dont le nom en interne comporte le nom de la classe englobante $ un numéro, il y a même le fichier avec ce nom dans votre répertoire

Ce qui vous intéresse c'est l'interface implémentée essayez : obs.getClass().getInterfaces()[0].getName() pour la voir en clair

Bons tests

Douin
Messages : 218
Inscription : 18 mars 2009 15:46

Re: TP7 question2 - pourquoi getClass ne fonctionne pas ?

Message par Douin » 11 déc. 2017 17:20

Ha j'oubliais, évitez d'ajouter
j'attends une explication
soyez plus courtois, aimable, cordial si vous souhaitez que l'on vous réponde dans ce forum d'entraides, et merci à pthellier davoir bien voulu le faire

Nourdine

Re: TP7 question2 - pourquoi getClass ne fonctionne pas ?

Message par Nourdine » 11 déc. 2017 23:47

Bonjour,

pthellier, tu me conseilles getClass().getName(); il n'y a pas une grande différence entre les deux.

Exemple : JButton jb = new JButton();

getClass() donne : class javax.swing.JButton
getClass().getName() donne : javax.swing.JButton

Avec getClass(), tu gagnes le mot "class" en plus.

Merci.

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité