gpt4 book ai didi

java - 方法的删除与类型上的另一种方法相同

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:54 26 4
gpt4 key购买 nike

下面是一个类中的两个方法

Developer 类和 Student 类不同,不共享任何父类。

以下两个方法具有相同的代码,并且在两个对象上调用的方法具有相同的名称 ex。获取开始日期。

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();
.....
}
}

显示错误Erasure of method is the same as another method in type

我了解同一站点上其他帖子出错的原因。

如何重构它以便不存在错误并且代码干净?

最佳答案

您的问题是由于 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;
}

关于java - 方法的删除与类型上的另一种方法相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com