那么,在大量的编程语言(而不仅仅是JAVA)的传统方法是比较函数返回一个数,负数,如果第一个谈到的第二个之前如果两者应该被认为是相同的,则为零;如果第一个在第二个之后,则为正。
你可以做什么,如果你喜欢的是添加你自己的方法,例如:
boolean isBefore(Rank rank) {
return this.compareTo(rank) < 0;
}
boolean isSame(Rank rank) {
return this.compareTo(rank) == 0;
}
boolean isAfter(Rank rank) {
return this.compareTo(rank) > 0;
}
你甚至可以创建自己的通用接口,使用默认的方法:
public interface EasyComparable<C> extends Comparable<C> {
default boolean isBefore(C that) {
return this.compareTo(that) < 0;
}
default boolean isSame(C that) {
return this.compareTo(that) == 0;
}
default boolean isAfter(C that) {
return this.compareTo(that) > 0;
}
}
然后有你的Rank
实施EasyComparator
代替Comparator
。
然后,你将能够做到:
if (rankA.isBefore(rankB)) {
doSomething();
}
else if (rankA.isSame(rankB)) {
doSomething();
}
else if (rankA.isAfter(rankB)) {
doSomething();
}
然后,您将能够做到这一点的其他对象也不仅仅是Rank
。
如果您对Rank
类没有控制权,您也可以扩展Comparator
,并添加3个默认方法,但它们必须使用两个参数而不是一个参数。
来源
2017-10-12 14:37:34
jbx
其实我不觉得这么难读。试想用右边的操作符代替'compareTo'。 – Henry