Если ваши экземпляры Number равны никогда Atomic (то есть AtomicInteger), тогда вы можете сделать что-то вроде:
private Integer compare(Number n1, Number n2) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Class<? extends Number> n1Class = n1.getClass();
if (n1Class.isInstance(n2)) {
Method compareTo = n1Class.getMethod("compareTo", n1Class);
return (Integer) compareTo.invoke(n1, n2);
}
return -23;
}
Это потому что все неатомарные Number
s реализуют Comparable
EDIT
Это дорого из-за размышлений: я знаю
РЕДАКТИРОВАТЬ 2 :
Это, конечно, не относится к случаю, когда вы хотите сравнить десятичные дроби с целыми числами или что-то подобное ...
РЕДАКТИРОВАТЬ 3 :
Предполагается, что нет никаких пользовательских потомков Number, которые не реализуют Comparable (спасибо @DJClayworth)