Jak sprawdzić, które klasy implementują określony interfejs w Eclipse?

88

Mam aplikację jako plik JAR z wieloma zależnościami. Z jakiegoś powodu muszę zdekompilować jedną z bibliotek i otworzyć ją za pomocą Eclipse. Czy dla danego interfejsu w projekcie istnieje sposób na znalezienie klasy (klas), które go implementują? Może się zdarzyć, że interfejs został zaimplementowany w innej bibliotece, której jeszcze nie zdekompilowałem. Czy można to zrobić na tego typu zajęciach?

Am1rr3zA
źródło

Odpowiedzi:

115

Kliknij interfejs prawym przyciskiem myszy i wybierz „Otwórz hierarchię typów”. Następnie kliknij „Pokaż hierarchię podtypów”.

JB Nizet
źródło
Nic mi nie pokazało, kiedy klikam „Pokaż hierarchię podtypów”, po prostu widzę interfejs, a nie klasę zaimplementowaną.
Am1rr3zA
1
Oznacza to, że żadna klasa w ścieżce budowania języka Java projektu nie implementuje tego interfejsu. Eclipse musi oczywiście wiedzieć o potencjalnych klasach: plik jar zawierający je musi znajdować się w ścieżce budowania Java projektu.
JB Nizet
Masz na myśli, że muszę dodać inny plik jar do ścieżki budowania Java?
Am1rr3zA
5
Tak oczywiście. Eclipse wie tylko o klasach w ścieżce klas. Nie skanuje całego dysku twardego, aby znaleźć jakąś klasę implementującą twój interfejs.
JB Nizet,
Dodałem inny plik JAR do mojej ścieżki budowania Java, ale nadal nie pokazałem implementacji. i jestem pewien, że jakaś klasa to implementuje, ponieważ dzięki Reflection mogę go używać.
Am1rr3zA
47

Spróbuj Ctrl+ Tpo wybraniu nazwy klasy; powinien działać w Java Perspective.

Skorpion
źródło
10

Możesz „Pokaż hierarchię typów” na elemencie (kliknij prawym przyciskiem myszy, aby wybrać tę opcję lub naciśnij, F4gdy element jest podświetlony) *.

Jednak spowoduje to wyświetlenie tylko elementów w projektach, do których się odnoszą („zależne”). Nie w innych.

Więc jeśli zdekompilowałeś jar, a jest inny jar, którego nie zdekompilowałeś, to implementacje (interfejsu) w tym pliku jar nie zostaną wymienione.

Załóżmy również, że zdekompilowałeś jar jako projekt i istnieje inny projekt, który odnosi się do jar, a nie zdekompilowany projekt, implementacje w nim również nie zostaną wymienione.

Będziesz więc musiał zdekompilować wszystkie pliki JAR i dodać je jako projekty (i dodać odwołania za pomocą „Ścieżki budowania Java”), aby upewnić się, że wszystkie implementacje w wybranych plikach JAR są wymienione.

* Szybka Hierarchia typów, ctrl + T pokaże podobną strukturę w panelu podpowiedzi / autouzupełniania. Jednak pełna hierarchia typów jest bardziej przydatna w przypadku rodzaju analizy, którą zamierzasz przeprowadzić.

Nivas
źródło
8

W wyszukiwarce Java znajduje się przycisk „Implementatory”.

Vlad
źródło
3
Jak to nie odpowiada na pytanie? Otwórz wyszukiwarkę Java, wprowadź nazwę interfejsu, kliknij opcję „Implementatory”, a „znajdziesz, które klasy implementują określony interfejs”.
stackexchanger,
1

Lub kliknij prawym przyciskiem myszy i wybierz, Quick Type Hierarchyaby wyświetlić rozwijane menu rozszerzające interfejsy i klasy implementujące.

Sean Patrick Floyd
źródło
Kiedy klikam prawym przyciskiem myszy i wybieram szybką hierarchię typów, po prostu widzę interfejs, a nie klasę zaimplementowaną
Am1rr3zA
0

Ctrl + H (opcja wyszukiwania) Otwórz perspektywę Java Search i wprowadź nazwę interfejsu, kliknij przycisk radiowy Implementors, a zobaczysz, które klasy implementują określony interfejs. To samo, co odpowiedź z stackexchanger powyżej

Rohit Mathur
źródło
0

Wybierz nazwę klasy, a następnie „F4” w Eclipse (środowisko Windows)

FullStackDeveloper
źródło