2011-06-26 9 views
1

私は数値の束を持っています。彼らは私があることが保証されているこれらのオブジェクトを(変換したいShortIntegerLongFloatまたはDouble(およびタイプObjectとしてこれらを返す外部ライブラリ(snakeYaml)の出力です)数値を効率的に二倍にキャスト

することができNumbers )からDoubleまでの値です。 (ストレージスペースは問題ではありません)。実際DoubleからShort/Integer/Long/Floatあるオブジェクトからキャストしようとしたときに

Javaコンパイラは明らかにClassCastExceptionをスローします。

最も効率的な採用方法についてのヒントは、感謝の意を表明します。

+0

効率が本当に心配な人は、プリミティブを使用できるときにはオブジェクトを使用しないことをお勧めします。しかし、私は効率性が本当にあなたの問題だとは思わない。 –

答えて

4

彼らがショートすることができ、整数、ロング、floatまたはdouble

これらのクラスは、すべてあなたが常にNumber.doubleValueメソッドを使用できることを意味Numberクラスのサブクラスです。

例:

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:また、私はちょうど倍にしてとにかくそれらを格納し、ボクシングを処理autoboxingはほとんどの場合、より良いアプローチだと思います。 – Voo

2

これを達成するためにNumber.doubleValue()メソッドを使用してください。オートボクシングを使用すると、戻り値は直接Doubleになります。

1

まず、あなたはDoubleにキャストの代わりにする必要がありますdouble。しかし、それだけで本当にダブルスされているオブジェクトのために働いていない整数またはロングやフロートなど

をその周りを取得するには、Numberにキャストし、doubleValue()

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

PSを使用しています。私はsnakeYamlに慣れていませんが、あなたが記述するapiは完全に間違っているか、間違って使っています。数値をオブジェクトとして返すのは意味がありません。どのようにそれを使用するかのいくつかの例のコードを見て興味深いでしょう。