类型推断似乎不适用于具有泛型方法的数组?我收到错误“方法包含(T[],T)不适用于参数(int [],int)”。我应该怎么做?
method(new int[1], 0); //Error
...
public static <T> void method(T[] array, T value) {
//Implement
}
类型推断似乎不适用于具有泛型方法的数组?我收到错误“方法包含(T[],T)不适用于参数(int [],int)”。我应该怎么做?
method(new int[1], 0); //Error
...
public static <T> void method(T[] array, T value) {
//Implement
}
您可以使用 Integer 而不是 int,因为泛型不适用于原始类型。
泛型不适用于原始类型,仅适用于对象类型。
由于自动装箱,您可以像使用具有原始类型的泛型一样执行操作:
<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);
为什么primitive
在这里使用类型。泛型仅适用于referenced
类型。
method(new int[1], 0); //Error
最好搭配
method(new Integer[]{1,2,3,4}, 0); //works fine