equals (), сгенерированный Eclipse: getOuterType ()? - PullRequest
16 голосов
/ 03 октября 2010

У меня есть простой класс 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 Ответ

13 голосов
/ 03 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...