以下代码给出了编译时错误,如
'方法print(List)与MethodOverLoadingGenericExample'
类型中的另一种方法具有相同的删除打印(List)public static void main(String[] args) {
}
public void print(List<Employee> empList){
System.out.println(empList);
}
public void print(List<Address> empList){
System.out.println(empList);
}
class Employee {
private String name;
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
class Address {
public int pincode;
public void setPincode(int pincode) {
this.pincode = pincode;
}
public int getPincode(){
return pincode;
}
}
答案 0 :(得分:1)
在编译时检查泛型的类型正确性。然后在称为类型擦除的过程中移除泛型类型信息。例如,List将转换为非泛型类型List,通常包含任意对象。编译时检查可确保生成的代码是类型正确的。
由于类型擦除,无法在运行时确定类型参数。例如,在运行时检查ArrayList时,没有通用的方法来确定在类型擦除之前它是ArrayList还是ArrayList。很多人对这种限制不满意。[6]有部分方法。例如,可以检查各个元素以确定它们所属的类型;例如,如果ArrayList包含一个Integer,那么该ArrayList可能已经用Integer参数化(但是,它可能已经使用Integer的任何父级参数化,例如Number或Object)。
中的类型擦除问题部分答案 1 :(得分:0)
通用类型参数在编译时是erased,因此这两种方法变得无法区分,这就是它出错的原因。