01: package test; 02: 03: public abstract class GenericsBean<T> { 04: 05: T id; 06: 07: @Override 08: public int hashCode() { 09: return id.hashCode(); 10: } 11: 12: @SuppressWarnings("unchecked") 13: @Override 14: public boolean equals(Object obj) { 15: return this == obj 16: || (obj instanceof GenericsBean && equals0((GenericsBean<T>) obj)); 17: } 18: 19: public boolean equals(GenericsBeanExplicacion:other) { 20: return this == other || equals0(other); 21: } 22: 23: protected boolean equals0(GenericsBean other) { 24: return this.id.equals(other.id); 25: } 26: 27: public T getId() { 28: return id; 29: } 30: 31: public void setId(T id) { 32: this.id = id; 33: } 34: 35: } 36:
03-03: Se define la clase "parametrizada" que se empleara para definir el id del bean. Esta clase del id, puede ser incluso un id compuesto (un bean) y no solo un tipo nativo (Integer, Long, String, etc).
07-10: Se define el hashCode, utiilzando el hashCode del objeto id. A esta funcion se le agrega la anotacion @SuppressWarnings("unchecked"), para que el compilador no muestre mensajes de alerta debido a la conversion de un tipo "Generico".
19-21: Definicion de equals, para comparar contra un objeto cualquiera.
23-25: Definicion de la funcion equals0, la cual utiliza el equals del id.
Optimizacion:
- La utilizacion de este codigo, ayuda a no definir estas funciones en cada ocasion. La mayor desventaja, radica en que no es posible cambiarle el nombre al atributo id.
- Se suprime el private en el id, para permitir acceso "friend"
No hay comentarios.:
Publicar un comentario