equals () généré par Eclipse: getOuterType ()?

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 ).