Java中数字对象之间的转换
我正在寻找一种简单、简洁的方法,将给定的数字对象转换为给定数字类型的对象Java中数字对象之间的转换,java,numbers,Java,Numbers,我正在寻找一种简单、简洁的方法,将给定的数字对象转换为给定数字类型的对象 由于缩小转换范围而导致精度损失是可以接受的 我宁愿不受约束 我需要像这样的东西: private static Number convert(Number num, Class<? extends Number> targetType) String simpleName = targetType.getSimpleName().toLowerCase(); if (simpleName.equals("
- 由于缩小转换范围而导致精度损失是可以接受的
- 我宁愿不受约束
private static Number convert(Number num, Class<? extends Number> targetType)
String simpleName = targetType.getSimpleName().toLowerCase();
if (simpleName.equals("integer")) {
simpleName = "int";
}
Method m = number.getClass().getMethod(simpleName + "Value");
return (Number) m.invoke(number);
private static Number convert(Number num,Class也许通过BigDecimal
转换会起作用?您可以使用以下方法:
private static Number convert(Number num, Class<? extends Number> targetType)
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()
等方法
至于biginger
或AtomicInteger
,您可以反射性地使用它们的构造函数,它接受一个参数-原语类型。我认为最清晰的方法是使用蛮力:
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;
}
private static Number convert(Number num,Class+1)。需要检查类型AtomicInteger
,AtomicLong
,BigDecimal
,biginger
,是否没有作为targetType传入,因为它们没有xxxValue()方法:<代码>编号<代码> @ Noel M:我不需要处理这些类型。但是,现在我意识到性能是重要的。我可以考虑冗长的解决方案……无论如何,我喜欢这个解决方案的创造性:我怀疑这需要转换为字符串或使用反射,对吗?不管实现如何,我至少会将方法签名重写为publicstaticn convert(数字、类类型)
。这将完全返回指定的数字类型,这在后处理中可能会有好处。@BalusC:你说得对。谢谢!+1以避免反射。反射将减慢应用程序的速度…我也会这样做。很好。我将使用此解决方案。使用这些类型的静态方法,实际上不需要检查所有的t谢谢,谢谢!