gpt4 book ai didi

Java反射。将返回值转换为 double

转载 作者:行者123 更新时间:2023-12-01 08:53:36 25 4
gpt4 key购买 nike

我想使用Java反射将方法的返回值转换为double,无论实际返回类型是Number还是原始int、long、float、double等。

为了确保该方法实际上返回一个可以转换为 double 值的值,我使用

List<String> numberTypes = Arrays.asList("int", "Integer", "double", "Double", "long", "Long", "float", "Float");
if (numberTypes.contains(method.getReturnType().getSimpleName())){
Double a = new Double( method.invoke(obj) );
}

但是 Eclipse 在这里告诉我,它希望我将 invoke 的输出转换为 Double。本质上它希望我这样做......

if (numberTypes.contains(method.getReturnType().getSimpleName())){
Double a = new Double( (Double) method.invoke(obj) );
}

但在我看来,我可能会引入一个错误,因为如果该对象实际上是一个原始 int (例如),那么在我看来,强制转换将是不正确的。所以开放性问题:

1)我应该插入类型转换吗?

2) 有没有更好的方法将返回值转换为 Double?

3)如果最终目标是将 Double 转换为 String,我可以在这里采取捷径吗?例如,我们最终可能只需要通过网络发送字符串形式的值。如果这是最终目标,是否有更好的方法来实现上述目标?

最佳答案

1). Java 使用编译时多态性进行重载 - 运行哪个重载方法是在编译期间确定的。

例如:

static double f(Integer x) { ... }
static double f(Double x) { ... }

// somewhere in the code:
Object h = new Double(14.0);
f(h); // won't compile - unable to determine which method you want to invoke
f((Integer)h); // will compile, but fail at run-time with ClassCastException
f((Double)h); // will compile and succeed.

这就是 Eclipse 告诉您执行强制转换的原因 - 它需要知道要调用哪个确切的构造函数(Double 有两个构造函数 - 一个接受 String,另一个 - )。

现在我认为应该清楚的是,您不能简单地转换为 Double (因为您可能具有其他类型的值),因此您不应该只插入转换。

2).反射(reflection)automatically boxes primitives for you 。所以有一个更好的方法来实现这一点:

double a = ((Number)method.invoke(obj)).doubleValue();

3).考虑到您很可能希望以某种方式格式化您的值,我认为您不应该采取任何捷径。

关于Java反射。将返回值转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42203165/

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