【发布时间】:2015-06-15 11:47:56
【问题描述】:
我的代码有一个奇怪的问题。
这是我用来测试 Chunk 类的代码:
List<Chunk> chunks = new ArrayList<Chunk>();
chunks.add(new Chunk(1,1,1));
System.out.println(chunks.indexOf(new Vector3i(1, 1, 1)));
这里是 Chunk 类的 equals 方法:
public boolean equals(Object object) {
System.out.println("Test _1_");
if (object != null && object instanceof Vector3i) {
System.out.println("Test _2_");
if((this.x == ((Vector3i) object).x)&&(this.y == ((Vector3i) object).y)&&(this.z == ((Vector3i) object).z)) {
System.out.println("Test _3_");
return true;
}
}
System.out.println("Test _4_");
return false;
}
Vector3i:
public class Vector3i {
public int x;
public int y;
public int z;
public Vector3i(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
}
当我运行它时,它只返回 -1。来自 equals 方法的测试打印不打印,这意味着它甚至没有开始执行。这是为什么呢?
【问题讨论】:
-
这是对
Object.equals()contract 的严重滥用。您的equals()方法不是reflexive、symmetric 或transitive。改用Map<Vector3i,Chunk>将唯一块与给定向量值相关联。 -
你有一个名为
Chunk的类,它有一个equals方法来检查参数是否是其他类型? -
@MadConan 因为chunk里面有很多数据,如果和新的比较的话会太重了。
-
@KaareZ 这就是地图的用途。
标签: java arraylist equals indexof