说我有这个:
Object obj = new Double(3.14);
有没有办法像obj
一样使用Double
而不明确地将其投放到Double
?例如,如果我想使用.doubleValue()
Double
方法进行计算。
答案 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
,这是Integer
,Short
等的超类,并定义.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())
但这不是一个好习惯。当然还有另一个很好的替代案例。发布您的代码