【问题标题】:Writing a default Comparator class in Java用 Java 编写一个默认的 Comparator 类
【发布时间】:2012-10-20 21:52:34
【问题描述】:
我正在用 Java 实现一个通用堆类。这个类有两个构造函数,一个是没有参数的默认构造函数。另一个接受用户可以传入的比较器对象,以便用户可以控制如何比较堆的元素。现在,如果用户使用默认构造函数,我希望我的类用于默认比较器对象。此对象的 compare 方法只是调用 compareTo() 方法(Comparable 接口的一部分)。有没有办法做到这一点,如果有,怎么做?
【问题讨论】:
标签:
java
oop
comparator
comparable
【解决方案1】:
我猜一个通用的比较器应该是这样的:
public class ComparableComparator<T extends Comparable<T>> implements Comparator<T> {
@Override
public int compare(T lhs, T rhs) {
return lhs.compareTo(rhs);
}
}
【解决方案2】:
使用来自 Apache Commons 的 ComparableComparator,它采用任意两个 Objects 并比较它们是否实现了 Comparable。
或者,不带比较器的构造函数应该强制执行K extends Comparable<K> 类型参数。