我需要使用非静态比较器对对象列表进行排序,该比较器使用其外部对象字段中的值。
class A {
public int x;
public int y;
public int z;
public Comparator<A> scoreComparator = new Comparator<A>() {
public compare(A o1, A o2) {
// System.out.println("this: " + this);
return (int) (x * o1.x - x * o2.x);
}
}
public A(int _x, int _y, int _z) {
x = _x;
y = _y;
z = _z;
}
}
A var_1 = new A(1, 2, 3);
A var_2 = new A(5, 6, 7);
List<A> list = getMyListFromSomewhere();
// the following will produce different ordering
Collections.sort(list, var_1.scoreComparator);
Collections.sort(list, var_2.scoreComparator);
但由于某种原因,这不能正常工作。当我取消注释比较器中的 println 行时,它表明引用是对 A 对象的,但它们在一次 sort() 调用中是不同的,因此“x”的值是不同的。我在这里做错了什么?