Stackoverflowers さん、こんにちは。
次の問題があります。
入力としてプリミティブ数の配列を取得する状況があります。たとえば、int[] または short[] または byte[] などです。ここで、コードを反復処理して特定の処理を行う必要があります。たとえば、数値をリストに書き込むなどです。ただし、問題は、すべてのタイプの数値に特定のリストが必要なことです。問題ありません、と私は思い、ジェネリックを使用しようとしました:
Object dataSet = provider.getDataArray();
Number[] copy = new Number[Array.getLength(dataSet)];
for(int i= 0; i < Array.getLength(dataSet); i++) {
copy[i] = (T) Array.get(dataSet, i);
}
これは美しく機能します。ただし、問題はパフォーマンスにあります。リフレクションと発生するプリミティブのボクシングはコストがかかるため、回避できないことはわかっています。私は今、コードの量を減らすためのパターンを探しています。
Object dataSet = provider.getDataArray();
Class<? extends Number> dataType = provider.getDataType();
Number[] copy = new Number[dataSet.length];
if(dataType == Float.class)
float[] dataSetAsFloat = (float[]) dataSet;
for(int i= 0; i < dataSet.length; i++)
copySet[i] = dataSetAsFloat[i];
else if (dataType == Double.class)
double[] dataSetAsDouble = (double[]) dataSet;
for(int i= 0; i < dataSet.length; i++)
copySet[i] = dataSetAsFloat[i];
....
私が書いているプログラムのアプリケーションはここに示されているほど単純ではないため、非常に肥大化したソリューションです。基本的に、このパフォーマンスの問題のために、数百行の余分なコードを作成します。これに対する解決策はありますか?おそらく、私が認識していないパターン、または私が見ていない本当に単純なトリックでしょうか?
私は応答に非常に感謝しています。
ありがとう。