Como descobrir quais classes implementam uma interface específica no Eclipse?

88

Tenho um aplicativo como arquivo JAR com muitas dependências. Por algum motivo, preciso descompilar uma das bibliotecas e abri-la com o Eclipse. Para uma determinada interface no projeto, há uma maneira de encontrar a (s) classe (s) que a implementa? Pode ser que a interface tenha sido implementada em outra biblioteca que ainda não descompilei. É possível fazer isso para esse tipo de aula?

Am1rr3zA
fonte

Respostas:

114

Clique com o botão direito na interface e escolha "Abrir hierarquia de tipo". Em seguida, clique em "Mostrar hierarquia do subtipo".

JB Nizet
fonte
Não me mostrou nada, quando clico em "Mostrar hierarquia de subtipos", apenas vejo a Interface, não a classe a implementou.
Am1rr3zA
1
Então, isso significa que nenhuma classe no Java Build Path do projeto implementa essa interface. É claro que o Eclipse precisa saber sobre as classes potenciais: o arquivo jar que as contém deve estar no Java Build Path do projeto.
JB Nizet
Você quer dizer que devo adicionar outro arquivo jar ao Java Build Path?
Am1rr3zA
5
Sim, claro. O Eclipse só conhece as classes no caminho de classe. Ele não varrerá todo o seu disco rígido para encontrar alguma classe que implemente sua interface.
JB Nizet
Eu adiciono outro arquivo Jar ao meu Java Build Path, mas ainda não me mostrou a implementação. e tenho certeza de que alguma classe o implementa porque via Reflection posso usá-lo.
Am1rr3zA
47

Tente Ctrl+ Tdepois de selecionar o nome da classe; deve funcionar na Perspectiva Java.

Escorpião
fonte
10

Você pode "Mostrar Hierarquia de Tipo" no item (Clique com o botão direito para escolher esta opção ou pressione F4 quando o item estiver destacado) *.

No entanto, isso listará apenas os itens nos projetos que são referidos ("dependentes"). Não em outros.

Portanto, se você descompilou um jar e há outro jar que não foi descompilado, as implementações (da interface) nesse jar não serão listadas.

Além disso, digamos que você tenha descompilado um jar como um projeto e haja outro projeto que se refere ao jar, e não ao projeto descompilado, implementações nesse também não serão listadas.

Portanto, você terá que descompilar todos os jars e adicioná-los como projetos (e adicionar referências por meio de "Java Build Path") para garantir que todas as implementações nos jars de sua escolha sejam listadas.

* Hierarquia de tipo rápido, ctrl + T mostrará uma estrutura semelhante em um painel do tipo dica de ferramenta / preenchimento automático. Mas a hierarquia de tipo completa é mais útil para o tipo de análise que você pretende fazer.

Nivas
fonte
8

Existe um botão de rádio "Implementadores" na Pesquisa Java.

Vlad
fonte
3
Como isso não responde à pergunta? Abra o Java Search, insira o nome da interface, clique em "Implementadores" e você encontrará "quais classes implementam uma interface específica".
stackexchanger
1

Ou clique com o botão direito e selecione Quick Type Hierarchypara um menu suspenso de interfaces de extensão e classes de implementação.

Sean Patrick Floyd
fonte
Quando clico com o botão direito e seleciono Hierarquia de tipo rápido, vejo apenas a interface, não a classe que a implementou
Am1rr3zA
0

Ctrl + H (opção de pesquisa) Abra a perspectiva de pesquisa Java e, insira o nome da interface, clique no botão de rádio Implementadores e você encontrará quais classes implementam uma interface específica. Igual à resposta do trocador de pilha acima

Rohit Mathur
fonte
0

Selecione o nome da classe e, em seguida, 'F4' no Eclipse (ambiente Windows)

FullStackDeveloper
fonte