gpt4 book ai didi

Java 泛型和 Number 类

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:47 24 4
gpt4 key购买 nike

我想创建一个比较数字的方法,但可以有一个数字的任何子类的输入。

我已经考虑过以下列方式执行此操作...

public static <T extends Number> void evaluate(T inputNumber) {
if (inputNumber >= x) {
...
}
}

在执行比较之前,我需要获得实际的原始值,Number 类具有为每个原始值检索它的方法,但我想要一种选择正确原始值的干净方法。

这可能吗?

干杯

最佳答案

Number API 没有提供获取值的简洁方法;你必须使用 instanceof

一种解决方案是将值“折叠”为两种类型:longdouble。这样,您就可以使用此代码:

if( inputNumber instanceof Float || inputNumber instanceof Double ) {
double val = inputNumber.doubleValue();
...
} else {
long val = inputNumber.longValue();
...
}

请注意,这仅适用于标准数字类型,但 Number 也由许多其他类型实现(AtomicIntegerBigDecimal) .

如果你想支持所有类型,一个技巧是使用 BigDecimal:

BigDecimal value = new BigDecimal( inputNumber.toString() );

这应该始终有效并为您提供最准确的结果。

关于Java 泛型和 Number 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com