说我有这个:
Object obj = new Double(3.14);
有没有办法obj
像 a 一样使用Double
而不显式地将其转换为Double
?例如,如果我想使用for 计算的.doubleValue()
方法。Double
不,没有办法做到这一点。obj
是类型的Object
(即使它是一个Double
实例),并且Object
该类没有doubleValue()
. 正确的方法确实是投:
Double d = (Double) obj;
如果您不能投射,唯一的方法是使用反射:
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
这通常只在一些有限的极端情况下有用——通常,强制转换、泛型或使用某些超类型是正确的方法。
你不能。
由于您引用的是 a Object
,因此您将只有可以使用的方法Object
。
请注意,您可以使用Number
, 它是 , 等的超类Integer
,Short
它定义了.doubleValue()
:
final Number n = new Double(2.0);
n.doubleValue(); // works
你能做的最接近的是这个
Number num = new Double(3.14);
double d= num.doubleValue();
您只能调用编译器知道可用的方法,而不是基于对象的运行时类型。
简而言之Object
,没有 doubleValue() 方法,因此您无法调用它。您必须有一个引用类型,它具有您要调用的方法。
不,这是不可能的。实例obj
是对 an 的引用,Object
只能看到Object
类的方法。您必须将其强制转换Double
为使用Double
该类的特定方法。
不!唯一的选择是使用:
obj.toString()
或者,用作双重:
Double.parseDouble(obj.toString())
但这不是一个好习惯。当然,您的情况还有其他不错的选择。发布您的代码