0

类型推断似乎不适用于具有泛型方法的数组?我收到错误“方法包含(T[],T)不适用于参数(int [],int)”。我应该怎么做?

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

...

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

3 回答 3

1

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

于 2016-04-09T14:28:03.333 回答
1

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

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

<T> void methodOne(T value) {}

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

这里实际发生的是int文字1被“装箱”到Integer.valueOf(1),这是 type 的对象Integer

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

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

但是,您不能将这两者与相同的类型变量混合使用:int[]并且Integer它们不是相关类型,因此没有T两个参数都满足的单一类型变量。int[]从to没有等效的自动装箱运算符Integer[]

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

method(new Integer[1], 0);
于 2016-04-10T20:33:35.077 回答
0

为什么primitive在这里使用类型。泛型仅适用于referenced类型。

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

最好搭配

 method(new Integer[]{1,2,3,4}, 0); //works fine
于 2016-04-09T14:37:56.650 回答