[英]java use object as double without explicit cast
说我有这个:
Object obj = new Double(3.14);
有没有一种方法可以像Double
一样使用obj
而不将其显式转换为Double
? 例如,如果我想使用Double
的.doubleValue()
方法进行计算。
不,没有办法做到这一点。 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
通常,这仅在某些有限的情况下才有用-通常,强制转换,泛型或使用某些超类型才是正确的方法。
你不能。
既然你提到的是一个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
是对Object
的引用,并且只能看到Object
类的方法。 您必须将其Double
转换为Double
才能使用Double
类的特定方法。
没有! 唯一的替代方法是使用:
obj.toString()
或者,用作双精度:
Double.parseDouble(obj.toString())
但这不是一个好习惯。 当然,您的案件还有其他不错的选择。 发布您的代码
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.