En Java, tengo una subclase Vertex
de la clase Java3D Point3f
. Ahora Point3f
calcula equals()
según los valores de sus coordenadas, pero para mi clase Vertex
quiero ser más estricto: dos vértices son iguales si son el mismo objeto. Hasta ahora, todo bien:¿Cómo se calcula el hashCode() desde la dirección del objeto?
class Vertex extends Point3f {
// ...
public boolean equals(Object other) {
return this == other;
}
}
Sé que esto viola el contrato de equals()
, pero ya que sólo a comparar vértices a otros vértices esto no es un problema.
Ahora, para poder poner vértices en un HashMap
, el método hashCode()
debe devolver resultados consistentes con equals()
. Actualmente lo hace, pero probablemente basa su valor de retorno en los campos del Point3f
, y por lo tanto dará colisiones hash para diferentes objetos Vertex
con las mismas coordenadas. Por lo tanto, me gustaría basar el hashCode()
en la dirección del objeto, en lugar de calcularlo desde los campos Vertex
. Sé que la clase Object
hace esto, pero no puedo llamar a su método hashCode()
porque Point3f
lo reemplaza.
Así que, en realidad mi pregunta es doble:
- ¿Debo incluso quieren un poco profunda
equals()
tales? - En caso afirmativo, ¿cómo obtengo la dirección del objeto para calcular el código hash?
Editar: me acaba de ocurrir algo ... podría generar un valor aleatorio int
en la creación de objetos, y el uso que para el código hash. ¿Es eso una buena idea? Por qué no)?
En realidad ... eso es exactamente lo que necesitaba: D – Thomas