Как в Java создать массив обобщённого типа (generic array: T[])

У массивов есть множество сложностей, когда они используются в сочетании с дженериками. Одной из таких сложностей является создание массива обобщённого типа: T[]. Эта задача решается при помощи метода newInstance() класса java.lang.reflect.Array.

Помимо информации о типе, для создания массива также понадобится знать его размер.

Лучше всего создавать такой массив в специальном методе, куда передавать тип и размер следующим образом:

public static <T> T[] createGenericArray(Class<T> clazz, int size) {

return (T[]) Array.newInstance(clazz, size);

}

Таким образом, следующий код, например создаст массив из 10 строк, заполненный null'ами, и выведет его содержимое (10 раз слово "null") в консоль:

public static void main(String[] args) {


String[] strs = createGenericArray(String.class, 10);


for (int i = 0; i < strs.length; i++) {

System.out.print(strs[i] + " ");

}

}


public static <T> T[] createGenericArray(Class<T> clazz, int size) {

return (T[]) Array.newInstance(clazz, size);

}