wha*_*les 5 java comparable comparator
我在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;
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
过去,我只看到人们这样做:
class Checker implements Comparator{
@Override
public int compare(Player A, Player B){
..........
..........
}
}
Run Code Online (Sandbox Code Playgroud)
所以第一个例子对我来说真的很新颖(因为我是初学者?)。这是有道理的:desc可以是类的属性/实例变量,Checker它指向Comparator类/接口的新实例。然而,这两种不同的做事方式背后还有更多的故事吗?它们都需要创建一个不同的类,所以我看不出如何更有条理。
两种语法都是绝对正确的。在第一种情况下,您只是使用匿名类的概念。其次,您创建了一个实现比较方法的 Checker 类。
作为初学者,理解第二种语法要容易得多,而且两者之间没有区别。
您可以在这里了解有关匿名类的更多信息 -
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
如果您想在更多地方使用比较器,最好在单独的类中使用解决方案而不是匿名类。匿名 vs 类解决方案类似于内联 css 样式 vs 样式类。