[英]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.