作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想创建一个比较数字的方法,但可以有一个数字的任何子类的输入。
我已经考虑过以下列方式执行此操作...
public static <T extends Number> void evaluate(T inputNumber) {
if (inputNumber >= x) {
...
}
}
在执行比较之前,我需要获得实际的原始值,Number 类具有为每个原始值检索它的方法,但我想要一种选择正确原始值的干净方法。
这可能吗?
干杯
最佳答案
Number
API 没有提供获取值的简洁方法;你必须使用 instanceof
。
一种解决方案是将值“折叠”为两种类型:long
和double
。这样,您就可以使用此代码:
if( inputNumber instanceof Float || inputNumber instanceof Double ) {
double val = inputNumber.doubleValue();
...
} else {
long val = inputNumber.longValue();
...
}
请注意,这仅适用于标准数字类型,但 Number
也由许多其他类型实现(AtomicInteger
、BigDecimal
) .
如果你想支持所有类型,一个技巧是使用 BigDecimal
:
BigDecimal value = new BigDecimal( inputNumber.toString() );
这应该始终有效并为您提供最准确的结果。
关于Java 泛型和 Number 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923081/
我是一名优秀的程序员,十分优秀!