我正在为学校学习 Java,主题是泛型方法。我需要编写一个具有通用方法的应用程序来“填充”具有相同元素的任何类型的数组。但它不起作用......任何人都可以帮助我:
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;
}
}
}
我为此尝试了多种方法并花了几个小时进行研究,但我仍然没有明白。
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The methodgenFill(T[], T)
in the typeFiller
is not applicable for the arguments(int[], int)
The methodgenFill(T[], T)
in the typeFiller
is not applicable for the arguments(double[], double)
at pack.switchshift.Filler.main(Filler.java:11)
最佳答案
泛型并不总是适用于基本类型(我一直写是因为你可以将原始 int
类型传递给类型为 T
的参数。其中 int
将自动装箱为 Integer
)。您无法创建 ArrayList<int>
,同样你不能传递 int[]
或任何其他基本类型数组,其中 T[]
数组是预期的。你必须通过 Integer[]
反而。同样通过 Double[]
而不是 double[]
.
这样想,泛型方法被编译器编译成类型删除的方法。在那个过程中,类型参数 T
这里被删除到它最左边的边界 Object
.因此,编译后的方法等同于:
private static void genFill(Object[] arr, Object element)
现在,您可以理解不能传递 int[]
哪里有Object[]
是需要的。
关于java - 填充数组的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21971921/