2012-01-03 24 views
5

Necesito una configuración de ejemplo para deshabilitar totalmente el estilo de verificación para los métodos hashCode() y equals().Deshabilitar checkstyle para hashCode e igual a

+2

@shaman ¿Qué pasa con la solución de matthews? – oers

+0

El problema es que checkstyle tiende a realizar comprobaciones dentro del código de métodos augogenerados equals() y hashcode(), que generalmente infringen nuestras convenciones de codificación –

Respuesta

2

esto no es realmente una respuesta a su pregunta, pero Lombok realmente brilla en evitar este tipo de código repetitivo: http://projectlombok.org

Para este caso, sólo puede anotar sus clases con:

@EqualsAndHashCode(of="id") 

o

@EqualsAndHashCode(excludes={"these","fields","wont","be","compared"}) 

no lo he probado contra Checkstyle, aunque ...

+0

Parece una respuesta, debe probarla y, si se lleva a cabo, obtendrá el premio –

+0

¡genial! ¡Me alegro de que haya sido útil! :) – elias

+0

sí - esto resuelve el problema de alguna manera ... ¡y se ve genial en el código! –

3

Consulte EqualsHashCode en Checkstyle 5.5: Coding Config. Basta con retirar la

<module name="EqualsHashCode"/> 

de su archivo de configuración Checkstyle, o hacerlo a través del plug-in de Eclipse. Pero me preguntaría por qué estás haciendo esto. La mala implementación de equals() y hashCode() es una fuente común de errores, así que tenga mucho cuidado antes de hacer esto.

+0

Estoy usando eclipe para generarlo. Sé que necesito deshabilitarlo de checkstyle xml; la pregunta es cómo. Me gustaría desactivar cada control de esos métodos. –

+1

@Matthew Farwell: Yo diría que la dependencia excesiva en * hashCode() * y * es igual * es una enfermedad aún peor. Apelar a la autoridad con una cita de * Effective Java * por Joshua Bloch: * "Simplemente no hay forma de extender una clase instanciable y agregar un aspecto mientras se preserva el contrato igual" *. Este es un problema muy conocido, muy documentado y muy real. Se podría argumentar que un hashCode/equals predeterminado es más sensato que lanzar una excepción que tratar de implementar un equals/hashCode "correcto". Martin Odersky sobre el tema: http://www.artima.com/lejava/articles/equality.html – TacticalCoder

+0

@Matthew Farwell: ahora, por supuesto, * uso * * hashCode * y * es igual * y todas las grandes colecciones dependen de estos ... Pero quería señalar cuán escandalosamente difícil es esto frente a la herencia: la explicación del método 'canEqual * en ese artículo de Artima (y las restricciones que impone) me abrió los ojos:) Definitivamente no algo que checkstyle verifica;) – TacticalCoder

2

Checkstyle in eclipse. Abra Windows -> Preferencias -> Estilo de comprobación.

Si está utilizando la configuración predeterminada, copie a un nombre diferente, seleccione el copiado y haga clic en configurar. Busque iguales y seleccione 'Igual y Hashcode' en problemas de codificación. Desmarque todos los habilitados que no necesita.

Puntee en Aceptar y establézcalo como predeterminado.

+0

Estoy seguro de que Hudson ejecuta el estilo de control contra un conjunto particular de reglas. Simplemente reemplace esas reglas con las que genera utilizando el enfoque anterior. – bluesman

Cuestiones relacionadas