簡體   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