¿Cómo encontrar qué clases implementan una interfaz en particular en Eclipse?

88

Tengo una aplicación como archivo JAR con muchas dependencias. Por alguna razón, necesito descompilar una de las bibliotecas y abrirla con Eclipse. Para una interfaz dada en el proyecto, ¿hay alguna forma de encontrar la clase (s) que la implementa? Puede darse el caso de que la interfaz se haya implementado en otra biblioteca que aún no he descompilado. ¿Es posible hacer esto para este tipo de clases?

Am1rr3zA
fuente

Respuestas:

116

Haga clic derecho en la interfaz y elija "Abrir jerarquía de tipos". Luego haga clic en "Mostrar la jerarquía de subtipos".

JB Nizet
fuente
No me mostró nada, cuando hago clic en "Mostrar la jerarquía de subtipos", solo veo la interfaz, no la clase que la implementó.
Am1rr3zA
1
Entonces significa que ninguna clase en Java Build Path del proyecto implementa esta interfaz. Eclipse, por supuesto, tiene que conocer las clases potenciales: el archivo jar que las contiene debe estar en la ruta de compilación de Java del proyecto.
JB Nizet
¿Quiere decir que debo agregar otro archivo jar a la ruta de compilación de Java?
Am1rr3zA
5
Sí, por supuesto. Eclipse solo conoce las clases en el classpath. No escaneará todo su disco duro para encontrar alguna clase que implemente su interfaz.
JB Nizet
Agregué otro archivo Jar a mi ruta de compilación de Java pero aún no me mostró la implementación. y estoy seguro de que alguna clase lo implementa porque a través de Reflection puedo usarlo.
Am1rr3zA
47

Pruebe Ctrl+ Tdespués de seleccionar el nombre de la clase; debería funcionar en Java Perspective.

Escorpión
fuente
10

Puede "Mostrar jerarquía de tipos" en el elemento (haga clic derecho para elegir esta opción o presione F4cuando el elemento esté resaltado) *.

Sin embargo, esto solo enumerará los elementos de los proyectos que se refieren ("dependientes"). No en otros.

Entonces, si ha descompilado un frasco y hay otro frasco que no ha descompilado, las implementaciones (de la interfaz) en ese frasco no aparecerán en la lista.

Además, digamos que ha descompilado un jar como proyecto y hay otro proyecto que se refiere al jar, y no al proyecto descompilado, las implementaciones en ese tampoco se enumerarán.

Por lo tanto, tendrá que descompilar todos los archivos jar y agregarlos como proyectos (y agregar referencias a través de "Java Build Path") para asegurarse de que se enumeran todas las implementaciones en los archivos jar de su elección.

* Jerarquía de tipo rápido, ctrl + T mostrará una estructura similar en un tipo de panel de información sobre herramientas / autocompletar. Pero la jerarquía de tipos completa es más útil para el tipo de análisis que pretende realizar.

Nivas
fuente
8

Hay botones de opción "Implementadores" en Java Search.

Vlad
fuente
3
¿Cómo no responde a la pregunta? Abra Java Search, ingrese el nombre de la interfaz, haga clic en "Implementadores" y "encontrará qué clases implementan una interfaz en particular".
stackexchanger
1

O haga clic con el botón derecho y seleccione Quick Type Hierarchyun menú desplegable para ampliar interfaces e implementar clases.

Sean Patrick Floyd
fuente
Cuando hago clic con el botón derecho y selecciono Jerarquía de tipos rápidos, solo veo la interfaz, no la clase que la implementó
Am1rr3zA
0

Ctrl + H (Opción de búsqueda) Abra la perspectiva de búsqueda de Java e ingrese el nombre de la interfaz, haga clic en el botón de opción Implementadores y encontrará qué clases implementan una interfaz en particular. Igual que la respuesta de stackexchanger anterior

Rohit Mathur
fuente
0

Seleccione el nombre de la clase, luego 'F4' en Eclipse (entorno Windows)

FullStackDeveloper
fuente