I recently required generic array in my project. But in java, to initialize array generically is a problem, because the way generics are implemented.
So for eg. you can't do this :
Solution
But still I googled and found some solutions.
Solution 1 : Use reflections
So one solution to this using reflection, and making an array at runtime and point the reference to some new array.
Solution 2 : Use Object[] and cast to E
2nd solution is to use Object Class to solve the problem :
Or if you need value to be returned from the array at particular index try this :
This solved what I needed, but not in a clean way. But if thing works, it good for us. :)
So for eg. you can't do this :
public class GenericArray<E> {
private E a[];
public GenericArray()
{
a = new E[INITIAL_ARRAY_LENGTH];
}
}
Solution
But still I googled and found some solutions.
Solution 1 : Use reflections
So one solution to this using reflection, and making an array at runtime and point the reference to some new array.
class GenericArray<T> {
public GenericArray(Class<T> clazz,int capacity) {
//Create array at runtime using reflections
array=(T[])Array.newInstance(clazz,INITIAL_ARRAY_LENGTH);
}
private final T[] array;
}
Solution 2 : Use Object[] and cast to E
2nd solution is to use Object Class to solve the problem :
E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];
Or if you need value to be returned from the array at particular index try this :
public class GenericArray<E>{
private Object[] a;
public GenSet(int s) {
a = new Object[s];
}
@SuppressWarnings({"unchecked"})
E get(int i) {
return (E) a[i];
}
}
This solved what I needed, but not in a clean way. But if thing works, it good for us. :)
No comments:
Post a Comment