J’ai simple classe Point avec deux champs de type double
. J’ai demandé à Eclipse 3.6 de générer equals()
et hashCode()
pour cela. La méthode equals()
ressemble à ceci:
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Point other = (Point) obj; if (!getOuterType().equals(other.getOuterType())) return false; if (Double.doubleToLongBits(x) != Double.doubleToLongBits(other.x)) return false; if (Double.doubleToLongBits(y) != Double.doubleToLongBits(other.y)) return false; return true; }
Et le getOuterType
ressemble à ceci:
private Point getOuterType() { return Point.this; }
La question est donc: quel est le but de la ligne getOuterType().equals(other.getOuterType())
?
Eh bien, si votre classe est une classe interne (classe nestede non statique), elle a une instance externe englobante. Deux objects d’un type de classe interne ne sont pas vraiment égaux à moins que les instances englobantes ne soient également égales; l’instance externe ressemble à un champ caché (généralement appelé this$0
par javac
).