代码之家  ›  专栏  ›  技术社区  ›  Eyal Schneider

Java中数值对象间的转换

  •  2
  • Eyal Schneider  · 技术社区  · 14 年前

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

    • 由于缩小转换范围而导致的精度损失是可以接受的

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

    有没有不检查所有类型组合的方法?

    3 回复  |  直到 14 年前
        1
  •  4
  •   gpeche    14 年前

    我认为最清楚的方法是使用暴力:

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

    你可以用反射,但我觉得更刻薄。

        2
  •  4
  •   Bozho    14 年前

    您可以使用以下方法:

    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()

    至于 BigInteger AtomicInteger -您可以反射地使用它们的构造函数,它只接受一个参数-基元类型。

        3
  •  1
  •   Noel M    14 年前

    BigDecimal 会有用吗?