Java 可比:isLessThan、isGreaterThan、isEqualTo 的辅助方法
Java Comparable: helper methods for isLessThan, isGreaterThan, isEqualTo
对于实现 Comparable 接口的对象 a 和 b,我想避免使用类似
的代码
if (a.compareTo(b) > 0) {
...
}
相反,我正在寻找像
这样的辅助方法
if (a.isGreaterThan(b)) {
...
}
这对我有很大帮助,因为我不必总是查找 compareTo(T o) 的 return 值的定义:
Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
真正有用的是 5 种不同的方法:
Instead of use potential helper method:
a.compareTo(b) < 0 a.isLessThan(b)
a.compareTo(b) <= 0 a.isLessOrEqualTo(b)
a.compareTo(b) == 0 a.isEqualTo(b)
a.compareTo(b) >= 0 a.isGreaterOrEqualTo(b)
a.compareTo(b) > 0 a.isGreaterThan(b)
JDK 或其他提供此类功能的库中是否有类似这样的辅助方法?
每个 object 都存在 equals
方法。其余的你必须自己创造。您可以创建一个具有这些方法的接口,这样所有 children 都将拥有它们。
这应该有效:
public interface IComparable<T> extends Comparable<T> {
boolean isLessThan(T other);
boolean isLessOrEqualTo(T other);
boolean isGreaterOrEqualTo(T other);
boolean isGreaterThan(T other);
}
您可以为上述每个方法添加默认方法。像这样:
public interface IComparable<T> extends Comparable<T> {
default boolean isLessThan(T other) {
return compareTo(other) < 0;
}
default boolean isLessOrEqualTo(T other) {
return compareTo(other) <= 0;
}
default boolean isGreaterOrEqualTo(T other) {
return compareTo(other) >= 0;
}
default boolean isGreaterThan(T other) {
return compareTo(other) > 0;
}
}
如果您记得的话,您不需要这些方法,通过将 compareTo 参数带到比较的右侧来进行心理替换就足够了,如下所示:
a.compareTo(b) < 0 ----> a[.compareTo(...)] < b
因为就这么简单,所以通常没有人关心在图书馆中有任何更好的比较形式。
如果您仍然坚持一些更具可读性的表达形式,您可以使用 Java 8 中的默认方法来扩展 Comparable 接口,如下所示:
public interface ComparableDSL<T> extends Comparable<T> {
default boolean isLessThan(T that) {
return compareTo(that) < 0;
}
}
对于实现 Comparable 接口的对象 a 和 b,我想避免使用类似
的代码if (a.compareTo(b) > 0) {
...
}
相反,我正在寻找像
这样的辅助方法if (a.isGreaterThan(b)) {
...
}
这对我有很大帮助,因为我不必总是查找 compareTo(T o) 的 return 值的定义:
Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
真正有用的是 5 种不同的方法:
Instead of use potential helper method:
a.compareTo(b) < 0 a.isLessThan(b)
a.compareTo(b) <= 0 a.isLessOrEqualTo(b)
a.compareTo(b) == 0 a.isEqualTo(b)
a.compareTo(b) >= 0 a.isGreaterOrEqualTo(b)
a.compareTo(b) > 0 a.isGreaterThan(b)
JDK 或其他提供此类功能的库中是否有类似这样的辅助方法?
每个 object 都存在 equals
方法。其余的你必须自己创造。您可以创建一个具有这些方法的接口,这样所有 children 都将拥有它们。
这应该有效:
public interface IComparable<T> extends Comparable<T> {
boolean isLessThan(T other);
boolean isLessOrEqualTo(T other);
boolean isGreaterOrEqualTo(T other);
boolean isGreaterThan(T other);
}
您可以为上述每个方法添加默认方法。像这样:
public interface IComparable<T> extends Comparable<T> {
default boolean isLessThan(T other) {
return compareTo(other) < 0;
}
default boolean isLessOrEqualTo(T other) {
return compareTo(other) <= 0;
}
default boolean isGreaterOrEqualTo(T other) {
return compareTo(other) >= 0;
}
default boolean isGreaterThan(T other) {
return compareTo(other) > 0;
}
}
如果您记得的话,您不需要这些方法,通过将 compareTo 参数带到比较的右侧来进行心理替换就足够了,如下所示:
a.compareTo(b) < 0 ----> a[.compareTo(...)] < b
因为就这么简单,所以通常没有人关心在图书馆中有任何更好的比较形式。 如果您仍然坚持一些更具可读性的表达形式,您可以使用 Java 8 中的默认方法来扩展 Comparable 接口,如下所示:
public interface ComparableDSL<T> extends Comparable<T> {
default boolean isLessThan(T that) {
return compareTo(that) < 0;
}
}