一个有效的(但脆弱的)解决方案是这样的:
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,您需要考虑以下三种(至少?)特殊情况:
Infinity
,它等于所有事物,除了等于它的自身之外-Infinity
,它等于所有事物,除了等于它的自身NaN
,比较起来比较NaN``false
费力/不可能,因为所有与之比较的结果都会产生,包括检查自身是否相等。



