【发布时间】:2017-03-06 04:23:54
【问题描述】:
对于实现 Comparable 接口的对象 a 和 b,我希望避免使用类似的代码
if (a.compareTo(b) > 0) {
...
}
相反,我正在寻找类似的辅助方法
if (a.isGreaterThan(b)) {
...
}
这对我很有帮助,因为我不必总是查找 compareTo(T o) 的返回值的定义:
返回负整数、零或正整数,因为此对象小于、等于或大于指定对象。
真正有用的是 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 或其他提供此类功能的库中是否有类似的辅助方法?
【问题讨论】:
-
您确实意识到您需要编写的方法只需调用 compareTo 吗?像
boolean isLessThan(Comparable<T> a, T b){ return a.compareTo(b) < 0; }这样的东西(可能不正确,只是在没有检查的情况下写这个,但是静态泛型方法应该这样做 -
这比看起来更容易出错,你知道
<总是做与 JLS 默认相同的事情,但库中的isLessThan可以做任何事情,除非你检查它到底做了什么.为什么要用不同库的所有奇怪之处而不是使用纯 Java 来填满你的脑袋? -
+1 用于普通 Java,看起来新手想对所有东西都使用库,我在我的项目中几乎没有使用(几乎 ;))。 Java 已经很重了,不要为了删除一个简单的条件而添加一些库。
-
@Peter Lawrey 我会假设它使用 compareTo(T o) 方法,因为这些方法只会在 Comparables 上运行。例如如何“isLessThan(T o)”的实现仍然与 compareTo(T o) 方法中的相同。我更喜欢直接讲述故事的代码,而不必查找 compareTo() > 0 的含义。
-
@PeterLawrey 不,我强烈反对你的观点。当然
<的含义与compareTo() < 0不同,就像==的含义与equals()不同(尽管<在对象上没有任何意义)。在这种情况下,它归结为您在compareTo()方法中实现的内容。但正如我所说:如果你在 Comparables 上进行操作,isLessThan的含义是显而易见的。我会毫不犹豫地建议将以下默认方法包含在下一个 JDK 中。
标签: java methods helper comparable