一个有效的(但脆弱的)解决方案是这样的:
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
费力/不可能,因为所有与之比较的结果都会产生,包括检查自身是否相等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)