Eclipse生成的equals():getOuterType()?
我有两个类型为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())
行的目的是什么?
好吧,如果你的类是一个内部类(非静态嵌套类),它有一个外部的封闭实例。 除非封闭实例相等,否则内部类类型的两个对象实际上并不相等; 外部实例就像一个隐藏字段(通常由javac
命名为this$0
)。