使用引用变量指向比较器?

时间:2015-12-31 23:11:10

标签: java comparator comparable

我在练习时遇到了创建Comparator的新方法。任何人都可以解释一下吗?

class Checker{    
    public Comparator<Player> desc = new Comparator<Player>() {
        public int compare(Player A, Player B){
            if(A.score < B.score){
                return 1;
            }
            else if(A.score == B.score){
                return B.name.compareTo(A.name);
            }
            else{
                return -1;
            }
        }
    };
}

过去,我只看到有人这样做:

class Checker implements Comparator{
    @Override
    public int compare(Player A, Player B){
        ..........
        ..........
    }
}

所以第一个例子对我来说真的很新颖(因为我是初学者?)。它确实有意义: desc 可以是类Checker的属性/实例变量,它指向Comparator类/接口的新实例。然而这两种不同的做事方式背后有更多的故事?他们都需要创建一个不同的类,所以我看不出任何一个可以更有条理。

1 个答案:

答案 0 :(得分:3)

语法都绝对正确。在第一种情况下,您只是使用匿名类的概念。第二,你创建了一个类Checker,其中实现比较方法。

作为初学者,除了两者之间没有区别之外,理解第二种语法要容易得多。

您可以在此处了解有关匿名课程的更多信息 -

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

如果你想在更多地方使用比较器,最好在单独的类中使用解决方案而不是匿名类。匿名vs类解决方案类似于内联css样式和样式类。