Как узнать, какие классы реализуют определенный интерфейс в Eclipse?

88

У меня есть приложение в виде файла JAR со многими зависимостями. По какой-то причине мне нужно декомпилировать одну из библиотек и открыть ее с помощью Eclipse. Для данного интерфейса в проекте есть способ найти класс (ы), которые его реализуют? Возможно, интерфейс был реализован в другой библиотеке, которую я еще не декомпилировал. Возможно ли это для такого рода занятий?

Am1rr3zA
источник

Ответы:

116

Щелкните правой кнопкой мыши интерфейс и выберите «Иерархия открытого типа». Затем нажмите «Показать иерархию подтипов».

JB Nizet
источник
Он ничего не показал мне, когда я нажимаю «Показать иерархию подтипов», я просто вижу интерфейс, а не класс, который его реализовал.
Am1rr3zA
1
Тогда это означает, что никакой класс в пути сборки Java проекта не реализует этот интерфейс. Eclipse, конечно, должен знать о потенциальных классах: файл jar, содержащий их, должен находиться в пути сборки Java проекта.
JB Nizet,
Вы имеете в виду, что я должен добавить другой файл jar в путь сборки Java?
Am1rr3zA
5
Да, конечно. Eclipse знает только о классах в пути к классам. Он не будет сканировать весь ваш жесткий диск, чтобы найти какой-либо класс, реализующий ваш интерфейс.
JB Nizet
Я добавляю другой файл Jar в свой путь сборки Java, но все еще не показываю мне реализацию. и я уверен, что какой-то класс реализует это, потому что через Reflection я могу его использовать.
Am1rr3zA
47

Попробуйте Ctrl+ Tпосле выбора имени класса; должен работать в перспективе Java.

Скорпион
источник
10

Вы можете «Показать иерархию типов» для элемента (щелкните правой кнопкой мыши, чтобы выбрать этот параметр, или нажмите F4 когда элемент выделен) *.

Однако в нем будут перечислены только элементы тех проектов, на которые имеется ссылка («зависимые»). Не в других.

Таким образом, если вы декомпилировали банку, и есть еще одна банка, которую вы не декомпилировали, то реализации (интерфейса) в этой банке не будут перечислены.

Кроме того, предположим, что вы декомпилировали банку как проект, и есть другой проект, который ссылается на банку, а не на декомпилированный проект, реализации в котором также не будут перечислены.

Поэтому вам нужно будет декомпилировать все jar-файлы и добавить их как проекты (и добавить ссылки через «Java Build Path»), чтобы убедиться, что все реализации в jar-файлах по вашему выбору перечислены.

* Quick type Hierarchy, ctrl + T покажет аналогичную структуру в панели типа всплывающей подсказки / автозаполнения. Но полная иерархия типов более полезна для того типа анализа, который вы собираетесь проводить.

Нивас
источник
8

В поиске Java есть радиокнопка «Разработчики».

Влад
источник
3
Как он не отвечает на вопрос? Откройте Java Search, введите имя интерфейса, щелкните «Разработчики», и вы «найдете, какие классы реализуют конкретный интерфейс».
stackexchanger
1

Или щелкните правой кнопкой мыши и выберите Quick Type Hierarchyраскрывающееся меню расширения интерфейсов и реализации классов.

Шон Патрик Флойд
источник
Когда я
щелкаю
0

Ctrl + H (параметр поиска) Откройте перспективу поиска Java и введите имя интерфейса, щелкните переключатель «Реализаторы», и вы узнаете, какие классы реализуют конкретный интерфейс. То же, что и ответ от stackexchanger выше

Рохит Матур
источник
0

Выберите имя класса, затем F4 в Eclipse (среда Windows)

FullStackDeveloper
источник