Java - 泛型方法数组参数的类型推断

Java - type inference for array paramater of a generic method

类型推断似乎不适用于具有泛型方法的数组?我收到错误 'The method contains(T[], T) is not applicable for the arguments (int[], int)'。我应该怎么做?

method(new int[1], 0); //Error

...

public static <T> void method(T[] array, T value) {
    //Implement
}

您可以使用 Integer 而不是 int,因为泛型不适用于原始类型。

为什么要在此处输入 primitive。泛型仅适用于 referenced 类型。

method(new int[1], 0); //Error

最好搭配

 method(new Integer[]{1,2,3,4}, 0); //works fine

泛型不适用于原始类型,仅适用于对象类型。

由于自动装箱,您可以使用具有原始类型的泛型来执行看起来像的操作:

<T> void methodOne(T value) {}

methodOne(1);  // Compiles OK, T = Integer.

这里实际发生的是 int 文字 1 正在 "boxed" 到 Integer.valueOf(1),这是一个 Integer 类型的对象。

您还可以将 int[] 传递给泛型方法,因为 int[] 本身就是一个对象类型。所以:

methodOne(new int[1]);  // Compiles OK, T = int[].

但是,您不能将这两个与同一类型变量混合:int[]Integer 不是相关类型,因此没有单一类型变量 T两个参数都满意。从 int[]Integer[].

没有等效的自动装箱运算符

因此,您需要传递一个 Integer[] 数组作为第一个参数:

method(new Integer[1], 0);