Wie finde ich heraus, welche Klassen eine bestimmte Schnittstelle in Eclipse implementieren?

88

Ich habe eine Anwendung als JAR-Datei mit vielen Abhängigkeiten. Aus irgendeinem Grund muss ich eine der Bibliotheken dekompilieren und mit Eclipse öffnen. Gibt es für eine bestimmte Schnittstelle im Projekt eine Möglichkeit, die Klasse (n) zu finden, die sie implementiert? Es kann sein, dass die Schnittstelle in einer anderen Bibliothek implementiert wurde, die ich noch nicht dekompiliert habe. Ist es möglich, dies für diese Art von Klassen zu tun?

Am1rr3zA
quelle

Antworten:

114

Klicken Sie mit der rechten Maustaste auf die Benutzeroberfläche und wählen Sie "Typhierarchie öffnen". Klicken Sie dann auf "Subtyp-Hierarchie anzeigen".

JB Nizet
quelle
Es hat mir nichts gezeigt, wenn ich auf "Subtyp-Hierarchie anzeigen" klicke, sehe ich nur die Schnittstelle, nicht die Klasse, die sie implementiert hat.
Am1rr3zA
1
Dann bedeutet dies, dass keine Klasse im Java-Erstellungspfad des Projekts diese Schnittstelle implementiert. Eclipse muss natürlich die möglichen Klassen kennen: Die JAR-Datei, die sie enthält, muss sich im Java Build Path des Projekts befinden.
JB Nizet
Sie meinen, ich muss dem Java Build Path eine andere JAR-Datei hinzufügen?
Am1rr3zA
5
Ja natürlich. Eclipse kennt nur die Klassen im Klassenpfad. Es wird nicht Ihre gesamte Festplatte gescannt, um eine Klasse zu finden, die Ihre Schnittstelle implementiert.
JB Nizet
Ich habe meinem Java-Erstellungspfad eine andere Jar-Datei hinzugefügt, mir aber die Implementierung nicht angezeigt. und ich bin sicher, dass einige Klassen es implementieren, weil ich es über Reflection verwenden kann.
Am1rr3zA
47

Versuchen Sie Ctrl+, Tnachdem Sie den Klassennamen ausgewählt haben. sollte in Java Perspective funktionieren.

Skorpion
quelle
10

Sie können für das Element "Typhierarchie anzeigen" (Rechtsklick, um diese Option auszuwählen, oder drücken, F4wenn das Element markiert ist) *.

Dies listet jedoch nur Elemente in den Projekten auf, auf die verwiesen wird ("abhängig"). Nicht bei anderen.

Wenn Sie also ein JAR dekompiliert haben und es ein anderes JAR gibt, das Sie nicht dekompiliert haben, werden die Implementierungen (der Schnittstelle) in diesem JAR nicht aufgelistet.

Angenommen, Sie haben ein JAR als Projekt dekompiliert, und es gibt ein anderes Projekt, das sich auf das JAR bezieht, und nicht auf das dekompilierte Projekt. Implementierungen in diesem JAR werden ebenfalls nicht aufgelistet.

Sie müssen also alle Jars dekompilieren und als Projekte hinzufügen (und Referenzen über "Java Build Path" hinzufügen), um sicherzustellen, dass alle Implementierungen in den Jars Ihrer Wahl aufgelistet sind.

* Schnelltyp Hierarchie, ctrl + T zeigt eine ähnliche Struktur in einem Tooltip / Autocomplete-Panel. Die vollständige Typhierarchie ist jedoch für die Art der Analyse, die Sie durchführen möchten, nützlicher.

Nivas
quelle
8

In der Java-Suche gibt es das Optionsfeld "Implementierer".

Vlad
quelle
3
Wie beantwortet es die Frage nicht? Öffnen Sie die Java-Suche, geben Sie den Schnittstellennamen ein, klicken Sie auf "Implementierer" und Sie finden "welche Klassen eine bestimmte Schnittstelle implementieren".
Stackexchanger
1

Oder klicken Sie mit der rechten Maustaste und wählen Sie Quick Type Hierarchyein Pulldown-Menü zum Erweitern von Schnittstellen und Implementieren von Klassen aus.

Sean Patrick Floyd
quelle
Wenn ich mit der rechten
Maustaste klicke
0

Strg + H (Suchoption) Öffnen Sie die Java-Suchperspektive, geben Sie den Schnittstellennamen ein, klicken Sie auf das Optionsfeld Implementierer, und Sie finden heraus, welche Klassen eine bestimmte Schnittstelle implementieren. Gleich wie die Antwort vom Stapelaustauscher oben

Rohit Mathur
quelle
0

Wählen Sie den Klassennamen und dann 'F4' in Eclipse (Windows-Umgebung).

FullStackDeveloper
quelle