Java:从非静态比较器对其外部类字段的引用

标签 java reference comparator

我需要使用非静态比较器对对象列表进行排序,该比较器使用其外部对象字段中的值。

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”的值不同。我在这里做错了什么?

最佳答案

你能解释一下为什么你需要Comparator是非静态的吗?为什么不只是以下内容?

    static class MyComparator implements Comparator {
        public compare(A o1, A o2) {
            // System.out.println("this: " + this);
            return o1.x - o2.x;
        }
    }

    public Comparator scoreComparator = new MyComparator();

关于Java:从非静态比较器对其外部类字段的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3706721/

相关文章:

java - Java SQLexecuteQuery 抛出有效 sql 语句错误

c++ - 在 C++ 中何时返回指针、标量和引用?

java - 我们如何将与java中的对象关联的所有引用设置为null?

java.lang.IllegalArgumentException : Comparison method violates its general contract[dup] 异常

java - jinterop Win32_Process 创建

java - tomcat运行时NoSuchMethodError如何解决?

java - 在我的 MainActivity.java 文件中的何处添加代码以散列密码

algorithm - 生成 n 集的所有 k 子集的最有效算法是什么?

Java 文件列表未使用比较器排序

Java:这里的返回是做什么的?