01: package test; 02: 03: public class Bean { 04: 05: private String key; 06: 07: @Override 08: public int hashCode() { 09: return key.hashCode(); 10: } 11: 12: protected boolean equals0(Bean bean) { 13: return key.equals(bean.key); 14: } 15: 16: @Override 17: public boolean equals(Object obj) { 18: return this == obj || (obj instanceof Bean && equals0((Bean) obj)); 19: } 20: 21: public boolean equals(Bean bean) { 22: return this == bean || equals0(bean); 23: } 24: 25: public String getKey() { 26: return key; 27: } 28: 29: public void setKey(String key) { 30: this.key = key; 31: } 32: 33: } 34:
En este ejemplo en particular, se utilizan las funciones existentes hashCode de la clase String y equals de la misma clase.
Explicacion:
07-10: Se emplea la funcion hashCode de la clase String, para generar el hashCode de la clase Bean.
12-14: Se implementa una funcion equals0, utilizando la funcion equals de la clase String. Esta clase define la funcionalidad basica de la funcion equals de la clase Object.
16-19: En la implementacion de la funcion equals, se emplea la funcion equals0 definida previamente y verificando el caso en que se trata del mismo objeto.
21-23: Esta funcion se define, para verificar la igualdad entre objetos del mismo tipo
25- 31: Definicion de getters y setters propios de la clase.
Optimizacion:
- Uso de las funciones propias de String. Particularmente al definir la funcion hashCode. Esto mismo se puede implementar utilizando las funciones equivalentes de las clases Integer, Float, Double o cualquier otra que encapsule a un tipo nativo dentro del paquete java.lang
- Las funciones equals primero determinan si se trata del mismo objeto, antes de intentar comparar cualquier propiedad o atributo.
- Evitar la ejecucion del operador instanceof, en la medida de lo posible, al implementar 2 funciones equals, una generica, que recibe un parametro del tipo Object (linea 17) y una funcion especifica para objetos de la misma clase (linea 21). El mayor problema de estas funciones, radica en su resolucion, pues solo es posible optimizar en tiempo de ejecucion o por medio del uso de Reflection
gracias
ResponderBorrarEs un placer, espero que te sirva
Borrar