我正在实现一个接口(interface),它的功能类似于可以包含一种对象类型的表。接口(interface)指定如下函数:
double[] getDoubles(int columnIndex);
让我感到困惑的是,在我的实现中,我将表数据存储在二维 Object
数组(Object[][] data
)中。当我需要返回值时,我想做以下事情(假设 getDoubles()
只会在包含 double 的列上调用,所以不会有 ClassCastExceptions
):
double[] getDoubles(int columnIndex) {
return (double[]) data[columnIndex];
}
但是 - Java 不允许将 Object[]
强制转换为 double[]
。将其转换为 Double[]
是可以的,因为 Double
是一个对象而不是原始类型,但我的界面指定数据将作为 double[]
。
所以我有两个问题:
- 有什么方法可以从
Object[][]
表中获取列数据并返回基元数组? - 如果我将接口(interface)更改为返回
Double[]
,会对性能产生影响吗?
最佳答案
如果您不介意使用 3rd 方库,commons-lang 有 ArrayUtils 类型和各种操作方法。
Double[] doubles;
...
double[] d = ArrayUtils.toPrimitive(doubles);
还有互补的方法
doubles = ArrayUtils.toObject(d);
编辑:回答剩下的问题。这样做会有一些开销,但除非数组真的很大,否则你不应该担心它。在重构之前先测试一下是否有问题。
实现您实际询问的方法会得到类似的结果。
double[] getDoubles(int columnIndex) {
return ArrayUtils.toPrimitive(data[columnIndex]);
}
关于java - 如何将 Double[] 转换为 double[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1109988/