以下是类里面的两种方法
类(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
中的参数化类型信息在运行时被擦除,因此这些方法具有几乎相同的签名,并且您的代码无法编译。
为了解决您的问题,以下是一种解决方案,它概括了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(List<Datable> args)
{
for (Datable d: args) {
// TODO something
LocalDate foo = d.getStartDate();
}
// TODO return something
return null;
}