java使用object作为double而没有显式转换

时间:2013-06-12 14:49:03

标签: java object casting double downcast

说我有这个:

Object obj = new Double(3.14);

有没有办法像obj一样使用Double而不明确地将其投放到Double?例如,如果我想使用.doubleValue() Double方法进行计算。

6 个答案:

答案 0 :(得分:5)

不,没有办法做到这一点。 obj的类型为Object(即使它是Double 实例),Object类没有doubleValue()类这样的方法1}}。确实应该采取正确的方式:

Double d = (Double) obj;

答案 1 :(得分:3)

如果你不能施展,唯一的办法就是use reflection

Object obj = new Double(3.14);

Method m1 = obj.getClass().getMethod("doubleValue");
System.out.println("Double value: " + m1.invoke(obj));

Method m2 = obj.getClass().getMethod("intValue");
System.out.println("Int value: " + m2.invoke(obj));
Double value: 3.14
Int value: 3

这通常仅适用于某些有限的极端情况 - 通常情况下,投射,泛型或使用某种超类型是正确的方法。

答案 2 :(得分:2)

你不能。

由于您的引用是Object,因此您只能使用Object可以使用的方法。

请注意,您可以使用Number,这是IntegerShort等的超类,并定义.doubleValue()

final Number n = new Double(2.0);
n.doubleValue(); // works

答案 3 :(得分:2)

你最接近的就是这个

Number num = new Double(3.14);
double d= num.doubleValue();

您只能调用编译器知道的方法,而不是基于对象的运行时类型。

简而言之,Object没有doubleValue()方法,因此您无法调用它。您必须拥有一个具有您要调用的方法的引用类型。

答案 4 :(得分:1)

不,这是不可能的。实例obj是对Object的引用,只能看到Object类的方法。您必须将其强制转换为Double才能使用Double类的特定方法。

答案 5 :(得分:0)

没有! 唯一的选择是使用:

obj.toString()

或者,用作双倍:

Double.parseDouble(obj.toString())

但这不是一个好习惯。当然还有另一个很好的替代案例。发布您的代码