Possible Duplicate:
Creating generic arrays in Java
I want to trim a generic array of objects down to only the first len elements. This seems like it should work:
@SuppressWarnings("unchecked")
public static <T> T[] trimArray(T[] data, int len){
T[] result = (T[]) new Object[len];
System.arraycopy(data, 0, result, 0, len);
return result;
}
But it throws a ClassCastException if I do something like
public class Foo{
double f;
public Foo(double f){
this.f = f;
}
}
public static void main(String[] args){
Foo[] A = new Foo[10];
A[0]= new Foo(1);
A[1]= new Foo(2);
A[2]= new Foo(3);
Foo[] B = trimArray(A, 3);
}
I don’t understand why this won’t work, but something similar does in java generic casting in generic classes
The JDK already has a builtin for this:
Javadoc (since 1.6)
Note however that it will also expand the array (padded with
nulls) if the source array length is less than the wanted length. You can easily work around this by using, for instance: