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?

Respostas:


114

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


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.


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.


8

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


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.


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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.