我有一个坐标类和一个坐标列表。我已经重写了坐标类的 equals 方法,但是当我在坐标列表中使用 contains 时,列表中的坐标为 false。 有没有人知道我哪里出错了? x 和 y 值是整数。
public boolean equals(Coordinate c){
return (this.x == c.getxCoordinate() && this.y == c.getyCoordinate());
}
名单如下:
List safe_locs = new ArrayList<Coordinate>();
测试如下:
System.out.println(c);
System.out.println(safe_locs.contains(c));
System.out.println(safe_locs);
输出是:
Coordinate[x: 0, y: 0]
false
[Coordinate[x: 0, y: 0], Coordinate[x: 1, y: 0], Coordinate[x: 0, y: 1], Coordinate[x: 3, y: 0], Coordinate[x: 0, y: 3]]
最佳答案
您的equals()
方法重载 equals(Object)
,虽然它应该覆盖它:
@Override
public boolean equals(Object o){
if(!(o instanceof Coordinate)) {
return false;
}
Coordinate c = (Coordinate)o;
return (this.x == c.getxCoordinate() && this.y == c.getyCoordinate());
}
不幸的是你必须使用向下转换。注意 @Override
annotation - 将来使用它来避免此类问题。
关于即使在定义 equals 之后,Java Contains 方法也会返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768952/