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