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);
类型推断似乎不适用于具有泛型方法的数组?我收到错误 '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);