繁体   English   中英

Java将对象用作双重对象而无需显式强制转换

[英]java use object as double without explicit cast

说我有这个:

Object obj = new Double(3.14);

有没有一种方法可以像Double一样使用obj而不将其显式转换为Double 例如,如果我想使用Double.doubleValue()方法进行计算。

不,没有办法做到这一点。 objObject类型的(即使它是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 ,它是IntegerShort等的超类,并且定义了.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM