2011-06-26 78 views
1

我有一堆數字值。它們可以是ShortIntegerLong,或FloatDouble(和是一個外部庫(snakeYaml)的輸出端返回這些作爲Object型)鑄造數字有效加倍

我想這些對象(被保證是Numbers轉換)到我的程序中的Double值。 (存儲空間不是問題)。試圖從一個對象,它實際上是一個Short/Integer/Long/FloatDouble施放時

Java編譯器顯然將引發ClassCastException

任何有關採用最有效方法的提示都會非常感謝。

+0

如果您真的擔心效率問題,我建議您在使用基元時不要使用對象。但是,我懷疑效率在這裏真的是你的問題。 –

回答

4

他們可以很短,整型,長整型,浮點或雙

這些類是Number類,這意味着你可以隨時使用Number.doubleValue方法的所有子類。

例子:

Number[] nums = { new Double(1.2), new Integer(5), new Float(3.0) }; 

double num1 = nums[0].doubleValue(); 
double num2 = nums[1].doubleValue(); 
double num3 = nums[2].doubleValue(); 

,或者,如果你真的想Double值,你可以依賴自動裝箱,只需做:

Double num1 = nums[0].doubleValue(); 
Double num2 = nums[1].doubleValue(); 
Double num3 = nums[2].doubleValue(); 
+0

+1:另外我想只是把它們存儲爲雙打,讓自動裝箱處理拳擊是在大多數情況下更好的方法。 – Voo

1

首先,你需要轉換爲Double代替double。但是,這僅適用於那些真正的雙打,而不是整數或長或Float等

要解決這個問題的對象,轉換爲Number和使用doubleValue()

Object o = 10; 
double i = ((Number)o).doubleValue(); 

PS。我不熟悉snakeYaml,但是你描述的api要麼設計完全錯誤,要麼你使用錯了。將數字作爲對象返回是沒有意義的。看看你如何使用它的一些示例代碼會很有趣。