2010-10-28 19 views
13

Tengo una clase que anula equals() y quiero ver dónde este igual método se está utilizando en el área de trabajo. Usando Eclipse, generalmente hago Ctrl-Shift-g que encuentra todas las referencias en el espacio de trabajo. Desafortunadamente, para iguales(), está retirando cada referencia de iguales en mi espacio de trabajo de cualquier tipo de, no solo en el que lo he anulado y es imposible determinar cuál de los muchos resultados es pertinente para mi búsqueda . ¿Es lo que quiero hacer posible?¿Cómo encontrar referencias específicas de tipo para equals() en el espacio de trabajo en Eclipse?

EDITAR: Para aclarar. Tengo una clase A que anula el método de iguales. Tengo una clase B (y otras) que usan clase A, pero no la extiendo. Quiero encontrar la que las clases en mi espacio de trabajo utilizan de Clase A es igual método, independientemente de si pertenecen o no a la jerarquía de clase A como de clase B.

Respuesta

3

en general no se puede hacer esto de igual a igual es el objeto, por ejemplo, tomar

mysession.getAttribute ("someObject"). equals (foo)

hay manera de detectar que este objeto es tu tipo de clase

+0

Buen punto. No había considerado esto. –

+1

No estoy de acuerdo con la "respuesta aceptada". Es obvio que las "coincidencias potenciales" podrían pasarse por alto y no obtendrá una respuesta 100% correcta. Pero para los propósitos de muchos programadores, sería bastante útil encontrar las "coincidencias definitivas". Actualmente no es posible en eclipse encontrar solo coincidencias definidas en funciones sobrescritas (pero en su lugar eclipse encontrará todas las referencias a Object.equals()). Lo consideraría al menos un diseño pobre, y tal vez incluso un error. – letowianka

-1

clic derecho sobre el método equals y seleccione la opción

References--> Hierarchy

+0

Si tengo una clase a, que prevalece sobre el método equals, estoy en busca de todos los lugares en donde la base de código A.equals() es ser llamado. La jerarquía de la anulación no es lo que estoy buscando. –

+0

Este método encontrará el uso del método equals en las subclases de la Clase A, pero no en la Clase B, que no extiende la Clase A y simplemente usa la Clase A en su lugar. –

1

Crea copias de la interfaz principal, clase con un nombre diferente. Implementar/extender desde esta nueva interfaz/clase. Luego busca las referencias de tu método con Ctrl + Shift + G.

Funcionó para mí, cuando se enfrentan con la misma situación.

14

Deje que su implementación equals lanzar temporalmente la clase Throwable: equals(Object obj) throws Throwable.

Por supuesto, esto le dará un error de compilación en su implementación equals porque no es compatible con Objects.equals(), sin embargo, también obtendrá un error de compilación en todas las clases que utilizan su método equals (al menos todas las clases que no manija/tirar throwable sí mismos):

no controlada tipo de excepción Throwable

+0

Sneaky! Me gusta. –

+0

Genio! Esta es la verdadera respuesta. (no puede detectar todos los usos, como MeBigFatGuy [señalado] (http://stackoverflow.com/a/4061765/822870), pero es tan bueno como se pone) –

Cuestiones relacionadas