我想比较两种类型的变量T extends Number。现在,我想知道两个变量中的哪个大于另一个或相等。不幸的是,我还不知道确切的类型,我只知道它将是的子类型java.lang.Number。我怎样才能做到这一点?
T extends Number
java.lang.Number
编辑 :我尝试了使用TreeSets的另一种解决方法,它实际上可以自然排序(当然,除了AtomicInteger和AtomicLong之外,Number实现的所有子类都可以工作Comparable)。因此,我将丢失重复的值。使用Lists时,Collection.sort()由于绑定不匹配,将不接受我的列表。非常不满意。
TreeSet
Number
Comparable
List
Collection.sort()
一个有效的(但脆弱的)解决方案是这样的:
class NumberComparator implements Comparator<Number> { public int compare(Number a, Number b){ return new BigDecimal(a.toString()).compareTo(new BigDecimal(b.toString())); } }
不过,它仍然不是很好,因为它依靠toString返回一个可解析的值BigDecimal(标准Java Number类可以执行此操作,但是Number合同不需要)。
toString
BigDecimal
七年后编辑: 正如评论中指出的那样toString,您需要考虑以下三种(至少?)特殊情况:
Infinity
-Infinity
NaN
NaN``false