Comment trouver quelles classes implémentent une interface particulière dans Eclipse?

88

J'ai une application sous forme de fichier JAR avec de nombreuses dépendances. Pour une raison quelconque, je dois décompiler l'une des bibliothèques et l'ouvrir avec Eclipse. Pour une interface donnée du projet, existe-t-il un moyen de trouver la ou les classes qui l'implémentent? Il se peut que l'interface ait été implémentée dans une autre bibliothèque que je n'ai pas encore décompilée. Est-il possible de faire cela pour ce genre de cours?

Am1rr3zA
la source

Réponses:

114

Cliquez avec le bouton droit de la souris sur l'interface et choisissez "Ouvrir la hiérarchie des types". Cliquez ensuite sur "Afficher la hiérarchie des sous-types".

JB Nizet
la source
Cela ne m'a rien montré, quand je clique sur "Afficher la hiérarchie des sous-types", je vois juste l'interface et non la classe qui l'a implémentée.
Am1rr3zA
1
Cela signifie alors qu'aucune classe du chemin de construction Java du projet n'implémente cette interface. Eclipse doit bien sûr connaître les classes potentielles: le fichier jar les contenant doit se trouver dans le chemin de construction Java du projet.
JB Nizet le
Vous voulez dire que je dois ajouter un autre fichier jar au chemin de compilation Java?
Am1rr3zA
5
Oui bien sûr. Eclipse ne connaît que les classes dans le chemin de classe. Il n'analysera pas l'intégralité de votre disque dur pour trouver une classe implémentant votre interface.
JB Nizet
J'ajoute un autre fichier Jar à mon chemin de construction Java mais je ne me montre toujours pas l'implémentation. et je suis sûr que certaines classes l'implémentent parce que via Reflection je peux l'utiliser.
Am1rr3zA
47

Essayez Ctrl+ Taprès avoir sélectionné le nom de la classe; devrait fonctionner dans la perspective Java.

Scorpion
la source
10

Vous pouvez "Afficher la hiérarchie des types" sur l'élément (cliquez avec le bouton droit pour choisir cette option ou appuyez sur F4 lorsque l'élément est mis en surbrillance) *.

Toutefois, cela ne listera que les éléments des projets référencés («dépendants»). Pas dans les autres.

Donc, si vous avez décompilé un fichier jar et qu'il y a un autre fichier que vous n'avez pas décompilé, les implémentations (de l'interface) de ce fichier ne seront pas répertoriées.

Supposons également que vous ayez décompilé un fichier jar en tant que projet et qu'il existe un autre projet qui fait référence au fichier jar, et non au projet décompilé, les implémentations qu'il contient ne seront pas non plus répertoriées.

Vous devrez donc décompiler tous les jars et les ajouter en tant que projets (et ajouter des références via "Java Build Path") pour vous assurer que toutes les implémentations dans les jars de votre choix sont répertoriées.

* Hiérarchie de type rapide, ctrl + T affichera une structure similaire dans une info-bulle / type de panneau de saisie semi-automatique. Mais la hiérarchie complète des types est plus utile pour le type d'analyse que vous avez l'intention de faire.

Nivas
la source
8

Il y a un bouton radio "Implémenteurs" dans la recherche Java.

Vlad
la source
3
Comment ne répond-il pas à la question? Ouvrez Java Search, entrez le nom de l'interface, cliquez sur "Implémenteurs" et vous "trouverez quelles classes implémentent une interface particulière."
stackexchanger
1

Ou cliquez avec le bouton droit de la souris et sélectionnez Quick Type Hierarchyun menu déroulant pour étendre les interfaces et implémenter les classes.

Sean Patrick Floyd
la source
Lorsque je clique avec le bouton droit de la souris et que je sélectionne Hiérarchie de types rapides, je vois juste l'interface et non la classe qui l'a implémentée
Am1rr3zA
0

Ctrl + H (option de recherche) Ouvrez la perspective de recherche Java et, entrez le nom de l'interface, cliquez sur le bouton radio Implémenteurs et vous trouverez quelles classes implémentent une interface particulière. Identique à la réponse de stackexchanger ci-dessus

Rohit Mathur
la source
0

Sélectionnez le nom de la classe, puis 'F4' dans Eclipse (environnement Windows)

FullStackDeveloper
la source