以下是类里面的两种方法

类(class)开发者和学生是不同的,并且不共享任何 parent 。

以下两个方法具有相同的代码,并且在两个对象上调用的方法均具有相同的名称ex。 getStartDate。

class hierarchyValidator {
    private LocalDate[][] getArrayOfTimespan(List<Developer> developers)
    {
       //here i have to call some method on developer from list
        LocalDate startDate = developer.getStartDate();
        ....
    }

    private LocalDate[][] getArrayOfTimespan(List<Student> students)
    {
       //here i have to call some method on student from list
        LocalDate startDate = student.getStartDate();
       .....
    }
}

它显示错误方法的擦除与类型中的另一种方法相同

我从同一网站上的其他帖子中了解错误的原因。

如何对其进行重构,以使错误不会在那里并且代码将变得干净?

最佳答案

您的问题是由于type erasure造成的:List中的参数化类型信息在运行时被擦除,因此这些方法具有几乎相同的签名,并且您的代码无法编译。

为了解决您的问题,以下是一种解决方案,它概括了DeveloperStudent的共同特征,因此对于两种给定的参数化类型,只需要一个 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(List<Datable> args)
{
    for (Datable d: args) {
        // TODO something
        LocalDate foo = d.getStartDate();
    }
    // TODO return something
    return null;
}

09-30 17:59
查看更多