- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
public static <T extends Comparable<T>> boolean isLessThan(T a, T b, double numericTolerance) {
if (a == null) {
return b != null;
}
boolean isLessThan = a.compareTo(b) < 0;
if (!isLessThan && a instanceof Number && b instanceof Number) {
isLessThan = ((Comparable) (((Number) a).doubleValue() - numericTolerance)).compareTo(((Number) b).doubleValue()) < 0;
}
return isLessThan;
}
Один из методов сравнения значений в пределах допустимой погрешности (последняя только для чисел).
Вроде бы и проще никак, но чувство говна не покидает. Советы по упрощению приветствуются.
А должен? С каким параметром дженерика он должен его имплементить? Попробуй написать адекватный Short.compareTo(Number).
Не забывай, что имплементить интерфейс в жабе можно только один раз, поэтому Integer уже не сможет заимплементить Comparable<Integer>.
В общем, типичная проблема жаболюбов - неудержимое желание родить "универсальное" решение, в действительности заточенное под конкретную проблему без намёка на реюзабельность.