This is the next question coming from Two methods for creating shared arrays .
When using two methods
@SuppressWarnings("unchecked") static <T> T[] array1(final Class<T> elementType, final int size) { return (T[]) Array.newInstance(elementType, size); }
static <T> T[] array2(final Class<T[]> arrayType, final int size) { return arrayType.cast(Array.newInstance(arrayType.getComponentType(), size)); }
Both methods work fine for an object type.
final Integer[] objectArray1 = array1(Integer.class, 0); final Integer[] objectArray2 = array2(Integer[].class, 0);
When it comes to primitives, both calls are not compiled.
GenericArray.java:12: error: incompatible types final int[] primitiveArray1 = array1(int.class, 0); ^ required: int[] found: Integer[] 1 error
GenericArray.java:13: error: method array2 in class GenericArray cannot be applied to given types; final int[] primitiveArray2 = array2(int[].class, 0); ^ required: Class<T[]>,int found: Class<int[]>,int reason: inferred type does not conform to declared bound(s) inferred: int bound(s): Object where T is a type-variable: T extends Object declared in method <T>array2(Class<T[]>,int) 1 error
How can I do with primitive types?
source share