实现类列表中的接口列表

时间:2013-09-19 18:32:40

标签: java interface

我有以下代码:

List<MassEditionObject> objects = getProjects();

其中MassEditionObject是由Project类实现的接口。

getProjects()返回List<Project>,看起来应该没问题,因为Project是一个MassEditionObject。

然而,Eclipse给了我这个错误: Type mismatch: cannot convert from List<Project> to List<MassEditionObject>

我理解界面的一般概念以及如何使用它们,我只是不确定为什么这是无效的。

谢谢,如果此问题已发布,我很抱歉。我搜索并发现了类似的情况,但没有人回答这个问题。

3 个答案:

答案 0 :(得分:5)

如果你想要正确的泛型版本,那就是

List<? extends MassEditionObject> objects = getProjects();

你应该阅读泛型,有时可能会有点复杂。 当然,如果您知道将返回一个List,那么您可以将其作为类型。但如果你有一个同时实施ProjectB的课程MassEditionObject,那么他们都可以接受。

List<? extends MassEditionObject> objects = getProjects();   // Return List<Project>
List<? extends MassEditionObject> objects2 = getProjectsB(); // Return List<ProjectB>

答案 1 :(得分:0)

你应该这样做。

List<Project> object = getProjects()其中getProjects()返回List<MassEditionObject>

ProjectMassEditionObjectMassEditionObject不一定是Project

由于上面的代码在你的情况下并不合适,你可以做到

List<Project> object = getProjects()与您现在拥有的getProjects相同。

也请参阅@Kayaman 的回答。

答案 2 :(得分:0)

将返回类型更改为getObjects

public List<? extends Project> getObjects();

你可以像这样使用它

List<Project> objs = getObjects();

List<MassEditionObject> mObjs = (List<MassEditionObject>)getObjects();