【发布时间】:2015-12-31 23:11:10
【问题描述】:
我在做练习时遇到了一种创建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 类/接口的新实例。然而这两种不同的做事方式背后是否还有更多故事?它们都需要创建一个不同的类,所以我看不出如何更有条理。
【问题讨论】:
-
你确定你看到的是
implements Comparator<T>而不是implements Comparator(没有<T>)?compare(Object o1, Object o2)在泛型时代之前(Java 5 之前)会很好,我们无法指定精确比较应该期望的类型。 -
@Pshemo 抱歉,我做了更改!但我确实想知道,为什么我们在为新类实现它时不需要一个
来指定类型? -
@Pshemo 那么第一种创建比较器的方法也很常见吗?当我搜索“Comparator Java”时,我以前从未在许多网站上看到过它
-
@whales 通常你会看到一个名为
CheckerComparator的类,它实现了Comparator<Checker>,而不是像上面所示的那样被嵌入。 -
我想知道到底是什么让你感到困惑。你问的是
Comparator还是Comparator<Person>?还是您对实现可比较的匿名类和标准类更感兴趣?
标签: java comparator comparable