你好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];
....
是一个非常臃肿的解决方案,因为我正在写的程序中的应用程序并不像这里显示的那么简单。基本上,由于这个性能问题,我创建了数百行额外的代码。有针对这个的解决方法吗?也许是我不知道的模式,或者我没有看到的一些非常简单的技巧?
我将非常感谢您的回复。
谢谢。