当前位置:  开发笔记 > 编程语言 > 正文

方法的擦除与类型中的另一种方法相同

如何解决《方法的擦除与类型中的另一种方法相同》经验,为你挑选了1个好方法。

以下是一个类中的两种方法

class Developer和Student是不同的,不共享任何父级.

以下两种方法都使用相同的代码和方法调用两个对象具有相同的名称ex.getStartDate.

class hierarchyValidator {
    private LocalDate[][] getArrayOfTimespan(List developers)
    {
       //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();
       .....
    }
}

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

我理解同一网站上其他帖子的错误原因.

如何重新考虑它,以便错误不会存在,代码将是干净的?



1> Mena..:

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

为了解决您的问题,这里有一个解决方案,它概括了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 args)
{
    for (Datable d: args) {
        // TODO something
        LocalDate foo = d.getStartDate();
    }
    // TODO return something
    return null;
}

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有