Преобразование между числовыми объектами в Java - PullRequest
2 голосов
/ 19 сентября 2010

Я ищу простой, краткий способ преобразования заданного объекта Number в объект заданного числового типа.

  • Потеря точности из-за сужения преобразований в порядке
  • Я предпочитаю не проходить строки.

Мне нужно что-то вроде:

private static Number convert(Number num, Class<? extends Number> targetType)

Есть ли способ сделать это без проверки всех комбинаций типов?

Ответы [ 3 ]

4 голосов
/ 19 сентября 2010

Вы можете использовать что-то вроде:

String simpleName = targetType.getSimpleName().toLowerCase();
if (simpleName.equals("integer")) {
   simpleName = "int";
}
Method m = number.getClass().getMethod(simpleName + "Value");
return (Number) m.invoke(number);

Это зависит от того факта, что Number имеет такие методы, как longValue(), floatValue() и т.д.* или AtomicInteger - вы можете использовать их конструктор отражательно, который принимает один аргумент - тип примитива.

4 голосов
/ 19 сентября 2010

Я думаю, что самый простой способ - использовать грубую силу:

private static Number convert(Number num, Class<? extends Number> targetType) {
    Number result = null;
    if (Byte.class.equals(targetType)) {
        result = Byte.valueOf(num.byteValue());
    } else if (Short.class.equals(targetType)) {
        result = Short.valueOf(num.shortValue());
    } else if (...) {
         ...
    } else {
        throw new IllegalArgumentException("targetType is not a Number");
    }
    return result;
}

Вы можете использовать отражение, но я считаю, что это более хакерски.

1 голос
/ 19 сентября 2010

Возможно, конвертация через BigDecimal будет работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...