在java中加载的方法给出编译时错误

时间:2016-10-04 10:31:14

标签: java generics

以下代码给出了编译时错误,如

'方法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;
    }
}

2 个答案:

答案 0 :(得分:1)

在编译时检查泛型的类型正确性。然后在称为类型擦除的过程中移除泛型类型信息。例如,List将转换为非泛型类型List,通常包含任意对象。编译时检查可确保生成的代码是类型正确的。

由于类型擦除,无法在运行时确定类型参数。例如,在运行时检查ArrayList时,没有通用的方法来确定在类型擦除之前它是ArrayList还是ArrayList。很多人对这种限制不满意。[6]有部分方法。例如,可以检查各个元素以确定它们所属的类型;例如,如果ArrayList包含一个Integer,那么该ArrayList可能已经用Integer参数化(但是,它可能已经使用Integer的任何父级参数化,例如Number或Object)。

有关详细信息,请参阅https://en.wikipedia.org/wiki/Generics_in_Java

中的类型擦除问题部分

答案 1 :(得分:0)

通用类型参数在编译时是erased,因此这两种方法变得无法区分,这就是它出错的原因。