我尝试编写一个通用方法来打印:
List<String[]>, List<Integer[]>
等。我有以下两种方法:
public static <T> void printList(List<T> list){
for(T n : list) {
System.out.print("[" + n + "]");
}
}
public static <T> void printList(List<T[]> list){
for(T[] arr: list) {
for(T n : arr){
System.out.print("[" + n + "]");
}
}
}
我收到编译错误:
public static <T> void printList(List<T[]> list){
where T#1,T#2 are type-variables:
T#1 extends Object declared in method <T#1>printList(List<T#1[]>)
T#2 extends Object declared in method <T#2>printList(List<T#2>)
有什么方法可以为List<T>
和List<T[]>
设置printList方法吗?
在运行时,您的List<T>
和List<T[]>
完全相同,因为编译器已擦除泛型类型。因此两个方法都具有相同的签名,并且您编译错误。要修复它,只需为其中一个方法指定一个不同的名称。
查看更多关于擦除概念What is the concept of erasure in generics in Java?,Java spec