Java中数字对象之间的转换

时间:2010-09-19 15:49:04

标签: java numbers

我正在寻找一种简单,简洁的方法将给定的Number对象转换为给定数值类型的对象。

  • 由于转换范围缩小而导致的精度不足
  • 我不想通过字符串。

我需要类似的东西:

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

有没有办法在不检查所有类型组合的情况下执行此操作?

3 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

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()等方法的事实。

至于BigIntegerAtomicInteger - 你可以反思地使用它们的构造函数,它接受一个参数 - 原始类型。

答案 1 :(得分:4)

我认为最明智的方法是使用蛮力:

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;
}

你可能会使用反射,但我发现更多的是hackish。

答案 2 :(得分:1)

也许通过BigDecimal进行转换会有效吗?