此方法用于将数组拆分为块reference。我想使这种方法通用。
问题是,我不能像这样初始化数组。
T[][] arrays = new T[chunks][];
完整的方法
public <T> T[][] splitArray(T[] arrayToSplit, int chunkSize) {
if (chunkSize <= 0) {
return null;
}
int rest = arrayToSplit.length % chunkSize;
int chunks = arrayToSplit.length / chunkSize + (rest > 0 ? 1 : 0);
T[][] arrays = new T[chunks][];
for (int i = 0; i < (rest > 0 ? chunks - 1 : chunks); i++) {
arrays[i] = Arrays.copyOfRange(arrayToSplit, i * chunkSize, i * chunkSize + chunkSize);
}
if (rest > 0) {
arrays[chunks - 1] = Arrays.copyOfRange(arrayToSplit, (chunks - 1) * chunkSize, (chunks - 1) * chunkSize + rest);
}
return arrays;
}
初始化通用数组的正确方法是什么?
最佳答案
您不能使用通用参数初始化数组。 That is a restriction on generics。
一种解决方法是创建一个Object[][]
并将其强制转换为T[][]
:
T[][] arrays = (T[][])new Object[chunks][];