填充数组的通用方法

Syn*_*ons 2 java arrays generics

我正在学习java for school,主题是通用方法.我需要编写一个具有通用方法的应用程序来"填充"具有相同元素的任何类型的数组.但它没有用......任何人都可以帮助我:

package pack.switchshift;
import java.lang.reflect.Array;

public class Filler {

    public static void main(String [] args) {
        int[] intArr = new int[10];
        String[] stringArr = new String[10];
        double[] doubleArr = new double[10];

        genFill(intArr, 0);
        genFill(stringArr, "0");
        genFill(doubleArr, 0.0);

        for (int element : intArr){
            System.out.print(element);
        }
    }

    private static <T> void genFill(T[] arr, T element) {
        for (int i = 0; i < arr.length; i++) {
            arr[i] = element;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了多种方法并花了几个小时进行研究,但我仍然没有得到它.

线程"main"中的异常java.lang.Error:未解决的编译问题:类型中
的方法不适用于参数类型中 的方法不适用于pack.switchshift.Filler.main(Filler.java)中的参数:11)genFill(T[], T)Filler(int[], int)
genFill(T[], T)Filler(double[], double)

Roh*_*ain 6

泛型并不总是适用于原始类型(我写的总是因为你可以将原始int类型传递给类型的参数T.其中int将自动装箱Integer).你不能创建一个ArrayList<int>类似的,你不能传递一个int[]或任何其他原始类型数组,其中T[]数组是预期的.你必须通过一个Integer[]代替.同样通过Double[]代替double[].

可以这样想,泛型方法被编译器编译成类型擦除方法.在这个过程中,T这里的类型参数被删除到它的最左边界Object.所以,编译后的方法相当于:

private static void genFill(Object[] arr, Object element)
Run Code Online (Sandbox Code Playgroud)

现在,你可以了解你不能传递一个int[]地方的Object[]需要.