我有两个类型double
的简单类Point。我让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())
行的目的是什么?
答案 0 :(得分:13)
好吧,如果你的类是一个内部类(非静态嵌套类),它有一个外部的封闭实例。除非封闭实例相等,否则内部类类型的两个对象实际上并不相等;外部实例类似于隐藏字段(通常由this$0
命名为javac
。)