我有一个带有这样签名的方法:
Number upcast(Number n, Class<? extends Number> type)
注意:我确信我的代码只会将原始包装类型传递给此方法(即Float.class
,Integer.class
)。
如果传递的类型足够大以容纳传递的Number
,我想将此数字作为传递类的实例返回。
否则,我想返回原来的Number
。
我怎样才能实现这样的方法,因为由于类型不同,我不能cast
参数?
目前,我有:
try {
double max = c.getDeclaredField("MAX_VALUE").getDouble(null);
double val = n.doubleValue();
double abs = Math.abs(val);
if(abs >= max) return n;
//Part 2?
//Can't do type.cast(n), or valueOf.invoke(null, n).
} catch (NoSuchFieldException | IllegalAccessException e) {
...
}
我最好如何实现这个目标?包装类的valueOf
方法每个只接受它们各自的类型,所以我不能,例如,将double
传递给???.valueOf
。
我是否需要使用多个if
检查班级的类型,然后拨打n.???Value
?