b_erb b_erb - 4 months ago 17
Java Question

Comparing the values of two generic Numbers

I want to compare to variables, both of type

T extends Number
. Now I want to know which of the two variables is greater than the other or equal. Unfortunately I don't know the exact type yet, I only know that it will be a subtype of
java.lang.Number
. How can I do that?

EDIT: I tried another workaround using
TreeSet
s, which actually worked with natural ordering (of course it works, all known subclasses of
Number
implement
Comparable
). Thus I'll lose duplicate values. When using
List
s,
Collection.sort()
will not accept my list due to bound mismatchs. Very unsatisfactory.

Answer

A working (but brittle) solution is something like this:

class NumberComparator implements Comparator<Number> {

    public int compare(Number a, Number b){
        return new BigDecimal(a.toString()).compareTo(new BigDecimal(b.toString()));
    }

}

It's still not great, though, since it counts on toString returning a value parsable by BigDecimal (which the standard Java Number classes do, but which the Number contract doesn't demand).