使用引用变量指向比较器?
Using reference variable to point to a 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;
}
}
};
}
以前只见过这样的人:
class Checker implements Comparator{
@Override
public int compare(Player A, Player B){
..........
..........
}
}
所以第一个例子对我来说真的很新奇(因为我是初学者?)。它确实有意义:desc 可能是 class Checker
的 property/instance 变量,它指向 Comparator
class/interface。不过这两种不同的做事方式背后还有更多的故事吗?它们都需要创建一个不同的 class,所以我看不出任何一个可以更有条理。
两种语法都完全正确。在第一种情况下,您只是简单地使用了 anonymous class 的概念。其次,您创建了一个 class 检查器,它 实现了 比较方法。
作为初学者,理解第二种语法要容易得多,但两者之间没有区别。
您可以在此处了解有关匿名 class 的更多信息 -
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
如果您想在更多地方使用比较器,最好在单独的 class 中使用解决方案,而不是匿名的。匿名 vs class 解决方案类似于内联 css 样式 vs 样式 classes.
我 运行 在做练习的同时进入了一种创造 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 可能是 class Checker
的 property/instance 变量,它指向 Comparator
class/interface。不过这两种不同的做事方式背后还有更多的故事吗?它们都需要创建一个不同的 class,所以我看不出任何一个可以更有条理。
两种语法都完全正确。在第一种情况下,您只是简单地使用了 anonymous class 的概念。其次,您创建了一个 class 检查器,它 实现了 比较方法。
作为初学者,理解第二种语法要容易得多,但两者之间没有区别。
您可以在此处了解有关匿名 class 的更多信息 -
https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
如果您想在更多地方使用比较器,最好在单独的 class 中使用解决方案,而不是匿名的。匿名 vs class 解决方案类似于内联 css 样式 vs 样式 classes.