在方法中分离逻辑的最佳实践是什么,谁将使用 Comparable 元素,或者在创建时提供特定的 Comparator,具体取决于使用的类的构造函数? 示例:
public class MinMax<E> {
private final Comparator<? super E> comparator;
private final boolean isSpecificComparatorProvided;
public MinMax() {
this.comparator = null;
this.isSpecificComparatorProvided = false;
........;
}
public MinMax(Comparator<? super E> comparator) {
this.comparator = comparator;
this.isSpecificComparatorProvided = true;
........;
}
private boolean isBigOrEqual(E e1, E e2) {
if (isSpecificComparatorProvided) {
Comparator<? super E> cpr = comparator;
int cmpr = cpr.compare(e1, e2);
return cmpr > -1;
} else {
@SuppressWarnings("unchecked")
Comparable<? super E> e1Comparable = (Comparable<? super E>) e1;
int cmprTo = e1Comparable.compareTo(e2);
return cmprTo > -1;
}
}
}
我是否始终在 isBigOrEqual() 方法中检查特定比较器? 当没有提供特定的比较器时,是否还需要转换为 Comparable ? 还有其他方法吗?
最佳答案
处理这个问题的最简单方法可能是仅实现 Comparator
的情况,然后当您没有传递 Comparator
时,编写一个仅适用于 Comparable
的方法。 (在 Java 8 中,这只是 Comparator.naturalOrder()。)
new Comparator<T> {
@Override public int compare(T a, T b) {
return a.compareTo(b);
}
};
TreeMap
出于性能原因不会这样做,但这样做更简单。
关于java - 当提供自定义比较器或元素实现 Comparable 时,如何拆分方法中的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497521/