如何初始化通用数组?

Khe*_*raj 2 java arrays

此方法用于将数组拆分为块引用。我想使这种方法通用。

问题是,我不能像这样初始化数组。

T[][] arrays = new T[chunks][];
Run Code Online (Sandbox Code Playgroud)

完整的方法

 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;
    }
Run Code Online (Sandbox Code Playgroud)

初始化通用数组的正确方法是什么?

Swe*_*per 5

您不能使用通用参数初始化数组。那是对泛型的限制

一种解决方法是创建一个Object[][]并将其强制转换为T[][]

T[][] arrays = (T[][])new Object[chunks][];
Run Code Online (Sandbox Code Playgroud)

  • @Khemraj,因为您的方法是通用的,因此不能使用原始类型来调用它:https://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#instantiate使用`Byte []`(注意大写字母)。 (3认同)