以下是一个类中的两种方法
class Developer和Student是不同的,不共享任何父级.
以下两种方法都使用相同的代码和方法调用两个对象具有相同的名称ex.getStartDate.
class hierarchyValidator { private LocalDate[][] getArrayOfTimespan(Listdevelopers) { //here i have to call some method on developer from list LocalDate startDate = developer.getStartDate(); .... } private LocalDate[][] getArrayOfTimespan(List students) { //here i have to call some method on student from list LocalDate startDate = student.getStartDate(); ..... } }
它显示错误方法的擦除与类型中的另一种方法相同
我理解同一网站上其他帖子的错误原因.
如何重新考虑它,以便错误不会存在,代码将是干净的?
您的问题是由于类型擦除:您的List
s中的参数化类型信息在运行时被擦除,因此这些方法具有几乎相同的签名,您的代码无法编译.
为了解决您的问题,这里有一个解决方案,它概括了Developer
和的共同特征Student
,因此对于给定的参数化类型只需要一种 getArrayOfTimespan
方法:
// common interface to Student and Developer classes interface Datable { LocalDate getStartDate(); } // dev class implementing "datable" class Developer implements Datable { @Override public LocalDate getStartDate() { // TODO Auto-generated method stub return null; } } // student class implementing "datable" class Student implements Datable { @Override public LocalDate getStartDate() { // TODO Auto-generated method stub return null; } } // parameter interpreted as list of super type to both dev and student private LocalDate[][] getArrayOfTimespan(Listargs) { for (Datable d: args) { // TODO something LocalDate foo = d.getStartDate(); } // TODO return something return null; }