Pytanie Jak ustalić, które klasy implementują konkretny interfejs w Eclipse?


Mam aplikację jako plik JAR z wieloma zależnościami. Z jakiegoś powodu muszę dekompilować jedną z bibliotek i otworzyć ją za pomocą Eclipse. Dla danego interfejsu w projekcie istnieje sposób na znalezienie klasy, która go implementuje? Może się zdarzyć, że interfejs został zaimplementowany w innej bibliotece, której jeszcze nie zdekompilowałem. Czy jest to możliwe w przypadku tego rodzaju zajęć?


76
2017-09-12 09:00


pochodzenie




Odpowiedzi:


Kliknij interfejs prawym przyciskiem myszy i wybierz "Hierarchię typu otwartego". Następnie kliknij "Pokaż hierarchię podtypów".


96
2017-09-12 09:02



Nic mi nie pokazało, gdy klikam "Pokaż hierarchię podtypów" widzę interfejs, a nie klasa zaimplementowana. - Am1rr3zA
Oznacza to, że żadna klasa w ścieżce budowania Java projektu nie implementuje tego interfejsu. Eclipse oczywiście musi 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
Tak oczywiście. Eclipse zna tylko klasy w ścieżce klas. To nie skanuje całego dysku twardego, aby znaleźć klasy implementujące twój interfejs. - JB Nizet
Dodałem inny plik Jar do mojej ścieżki budowania Java, ale wciąż nie pokazałem mi implementacji. i jestem pewien, że niektóre klasy go wdrażają, ponieważ dzięki Reflection mogę z niego korzystać. - Am1rr3zA


Próbować Ctrl+T po wybraniu nazwy klasy; powinien działać w Java Perspective.


40
2017-09-12 09:02



najlepsza odpowiedź! Powinien być oznaczony jako właściwy. - Bruno Paulino


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

Jednak spowoduje to wyświetlenie tylko pozycji w projektach, które są odsyłane ("zależne"). Nie w innych.

Więc jeśli zdekompilowałeś słoik i istnieje inny słoik, którego nie dekompilowałeś, wtedy implementacje (interfejsu) w tym słoiku nie będą wymienione.

Załóżmy również, że dekompilowałeś słoik jako projekt i istnieje inny projekt odnoszący się do słoika, a nie dekompilowany projekt, implementacje w nim również nie będą wymienione.

Więc będziesz musiał dekompilować wszystkie słoiki i dodać je jako projekty (i dodać odniesienia przez "Ścieżkę budowania Java"), aby upewnić się, że wszystkie implementacje w słoikach do wyboru są wymienione.

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


10
2017-09-12 09:03





W wyszukiwarce Java znajduje się przycisk "Implementors".


7
2018-02-28 14:51



Jak nie odpowiada na pytanie? Otwórz wyszukiwanie w Javie, wpisz nazwę interfejsu, kliknij "Implementorzy", a "znajdziesz klasy, które implementują konkretny interfejs." - stackexchanger


Lub kliknij prawym przyciskiem myszy i wybierz Quick Type Hierarchy dla rozwijanego menu rozszerzania interfejsów i implementowania klas.


1
2017-09-12 09:04



Kiedy klikam prawym przyciskiem myszy i wybieram Szybką hierarchię typów, widzę interfejs, a nie klasa zaimplementowana - Am1rr3zA


Ctrl + H (Opcja wyszukiwania) Otwórz perspektywę wyszukiwania Java i wprowadź nazwę interfejsu, kliknij przycisk Narzędzia, a zobaczysz, które klasy implementują konkretny interfejs. Taki sam jak odpowiedź ze stosu powyżej


0
2017-11-03 16:31



Odpowiedzi te nie zawsze będą w tej samej kolejności ... - Broots Waymb


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


0
2017-09-20 21:41