Equals(), сгенерированное Eclipse: getOuterType()?

У меня есть простой класс Point с двумя полями типа double. Я попросил Eclipse 3.6 создать для него equals() и hashCode(). Метод equals() выглядит следующим образом:

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

И getOuterType выглядит следующим образом:

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

Итак, возникает вопрос: какова цель строки getOuterType().equals(other.getOuterType())?

Ответы

Ответ 1

Хорошо, если ваш класс является внутренним классом (нестатический вложенный класс), он имеет внешний, охватывающий экземпляр. Два объекта внутреннего типа класса на самом деле не равны, если только экземпляры окружения не равны; внешний экземпляр, как скрытое поле (обычно называемое this$0 на javac).