I'm implementing an interface that has functionality similar to a table that can contain an types of objects. The interface specifies the following function:
double[] getDoubles(int columnIndex);
Where I'm stumped is that in my implementation, I'm storing the table data in a 2D Object
array (Object[][] data
). When I need to return the values, I want to do the following (it is assumed that getDoubles()
will only be called on a column that contains doubles, so there will be no ClassCastExceptions
):
double[] getDoubles(int columnIndex) {
return (double[]) data[columnIndex];
}
But - Java doesn't allow Object[]
to be cast to double[]
. Casting it to Double[]
is ok because Double
is an object and not a primitive, but my interface specifies that data will be returned as a double[]
.
So I have two questions:
Object[][]
table and return the array of primitives?Double[]
, will there be any performance impact?If you don't mind using a 3rd party library, commons-lang has the ArrayUtils type with various methods for manipulation.
Double[] doubles;
...
double[] d = ArrayUtils.toPrimitive(doubles);
There is also the complementary method
doubles = ArrayUtils.toObject(d);
Edit: To answer the rest of the question. There will be some overhead to doing this, but unless the array is really big you shouldn't worry about it. Test it first to see if it is a problem before refactoring.
Implementing the method you had actually asked about would give something like this.
double[] getDoubles(int columnIndex) {
return ArrayUtils.toPrimitive(data[columnIndex]);
}