I want to create an array of classes and I have these:
1)works fine
Class<MyClass>[] array = (Class<MyClass>[]) new Class<?>[list.size()];
2)java.lang.ClassCastException
Class<MyClass>[] array = (Class<MyClass>[]) Array.newInstance(MyClass.class, list.size());
3)we have a generic method , works fine
public static <T> List<T> method(T arg , T[] array){
array = (T[]) Array.newInstance(arg.getClass(), 1);
ArrayList<T> list = new ArrayList<T>(Arrays.asList(array));
array[0] = arg;
return new ArrayList<T>(Arrays.asList(array));
}
Please explain why we get the exception in 2 ? As I understand we are doing the same thing in 3 , so what's the difference ?
UPDATE
I guess my confusion is because we have:
Type mismatch: cannot convert from List< Class < MyClass > > to List< MyClass >
List<MyClass> list = Utils.addToList(MyClass.class, null);
Works
List<Class<MyClass>> list = Utils.method(MyClass.class, null);
I think I'm missing something , but I'm not sure what...
So it's finally clear what exacly I had in mind:
List<Class<MyClass>> list = Utils.method(MyClass.class, null);
Class<MyClass>[] array2 = (Class<MyClass>[]) Array.newInstance(MyClass.class.getClass(), list.size());
List<Class<MyClass>> list2 = Utils.method(MyClass.class, list.toArray(array2));