Syn*_*ons 2 java arrays generics
我正在学习java for school,主题是通用方法.我需要编写一个具有通用方法的应用程序来"填充"具有相同元素的任何类型的数组.但它没有用......任何人都可以帮助我:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了多种方法并花了几个小时进行研究,但我仍然没有得到它.
线程"main"中的异常java.lang.Error:未解决的编译问题:类型中
的方法不适用于参数类型中 的方法不适用于pack.switchshift.Filler.main(Filler.java)中的参数:11)genFill(T[], T)Filler(int[], int)genFill(T[], T)Filler(double[], double)
泛型并不总是适用于原始类型(我写的总是因为你可以将原始int类型传递给类型的参数T.其中int将自动装箱Integer).你不能创建一个ArrayList<int>类似的,你不能传递一个int[]或任何其他原始类型数组,其中T[]数组是预期的.你必须通过一个Integer[]代替.同样通过Double[]代替double[].
可以这样想,泛型方法被编译器编译成类型擦除方法.在这个过程中,T这里的类型参数被删除到它的最左边界Object.所以,编译后的方法相当于:
private static void genFill(Object[] arr, Object element)
Run Code Online (Sandbox Code Playgroud)
现在,你可以了解你不能传递一个int[]地方的Object[]需要.
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |