我想与类型为 T extends Number
的变量进行比较。现在我想知道这两个变量中的哪个大于或等于另一个。不幸的是我还不知道确切的类型,我只知道它将是 java.lang.Number
的子类型。我怎样才能做到这一点?
编辑:我尝试了另一种解决方法,使用 TreeSet
s,它实际上使用自然排序(当然它有效,所有子类 Number
实现 Comparable
除外原子长)。因此,我将丢失重复值。当使用 List
s, Collection.sort()
由于绑定不匹配,将不接受我的列表。很不满意。
原文由 b_erb 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个有效的(但脆弱的)解决方案是这样的:
不过,它仍然不是很好,因为它依赖于
toString
返回一个可由BigDecimal
解析的值(标准 JavaNumber
Number
合同没有要求)。编辑,七年后: 正如评论中指出的那样,有(至少?)三种特殊情况
toString
可以产生你需要考虑的问题:Infinity
,它大于一切,除了它自己等于-Infinity
,它小于一切,除了它自己等于NaN
,这是非常毛茸茸的/无法比较,因为 所有与NaN
的比较都会导致false
与自身进行相等性检查。