Artem Pelenitsyn
Artem Pelenitsyn

Reputation: 2578

equals() generated by Eclipse: getOuterType()?

I have simple class Point with two fields of type double. I asked Eclipse 3.6 to generate equals() and hashCode() for it. The equals() method looks like this:

@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;
}

And the getOuterType looks like this:

private Point getOuterType() {
    return Point.this;
}

So the question is: what's the purpose of getOuterType().equals(other.getOuterType()) line?

Upvotes: 16

Views: 2552

Answers (1)

C. K. Young
C. K. Young

Reputation: 223003

Well, if your class is an inner class (non-static nested class), it has an outer, enclosing instance. Two objects of an inner class type aren't really equal unless the enclosing instances are equal, too; the outer instance like a hidden field (usually named this$0 by javac).

Upvotes: 13

Related Questions