2010-10-03 4 views
15

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

@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()) линии?

+0

у вас есть внутренний класс? – Bozho

+0

Получается, что у меня есть, спасибо, он решен. –

ответ

13

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

+0

Eclipse, похоже, считает, что это внутренний класс. В противном случае он не будет генерировать метод getOuterType. – Grodriguez

+0

Спасибо, Крис! Вопрос действительно пришел от моего ученика, кажется, что он действительно поставил свой класс внутри другого. (Я не могу воспроизвести это на своем компьютере, пока не поместим класс внутри другого после вашего ответа.) –

+0

Grodriguez, да, спасибо! –

Смежные вопросы