一尘不染

比较两个通用数字的值

java

我想比较两种类型的变量T extends Number。现在,我想知道两个变量中的哪个大于另一个或相等。不幸的是,我还不知道确切的类型,我只知道它将是的子类型java.lang.Number。我怎样才能做到这一点?

编辑
:我尝试了使用TreeSets的另一种解决方法,它实际上可以自然排序(当然,除了AtomicInteger和AtomicLong之外,Number实现的所有子类都可以工作Comparable)。因此,我将丢失重复的值。使用Lists时,Collection.sort()由于绑定不匹配,将不接受我的列表。非常不满意。


阅读 200

收藏
2020-09-08

共1个答案

一尘不染

一个有效的(但脆弱的)解决方案是这样的:

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,您需要考虑以下三种(至少?)特殊情况:

2020-09-08