Generics не работает для примитивных типов. Массивы примитивов являются ссылочными типами, и вы можете использовать обобщенные типы для сопоставления типов ввода и вывода, но вы не можете применить границу, чтобы проверить, что это тип массива, потому что единственным супертипом типов примитивных массивов является Object
. Чтобы один и тот же код работал на всех типах массивов, вы должны будете использовать специальные методы в java.lang.reflect.Array
для получения и установки элементов массива, получения длины и т. Д.
import java.lang.reflect.Array;
private <T> T[] arrayCopy2d(T[] original) {
Class<?> arrayType = original.getClass().getComponentType().getComponentType();
int[] dims = {original.length, Array.getLength(original[0])};
T[] copy = (T[]) Array.newInstance(arrayType, dims);
for(int i = 0; i<dims[0]; i++){
for(int j = 0; j<dims[1], j++){
Array.set(copy[i], j, Array.get(original[i], j));
}
}
return copy;
}