4

我有以下代码:

List<MassEditionObject> objects = getProjects();

whereMassEditionObjectProject类实现的接口。

getProjects()List<Project>return ,这似乎应该没问题,因为 Project 是一个 MassEditionObject 。

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

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

谢谢,如果这个问题已经发布,对不起。我搜索并发现了类似的情况,但没有一个可以回答这个问题。

4

3 回答 3

6

如果您想要适当的泛型版本,它将是

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

您应该阅读泛型,有时可能会有点复杂。当然,如果你知道会有一个List<Project>返回,你可以将其作为类型。但是如果你有一个类ProjectB也实现了MassEditionObject它们都是可以接受的。

List<? extends MassEditionObject> objects = getProjects();   // Return List<Project>
List<? extends MassEditionObject> objects2 = getProjectsB(); // Return List<ProjectB>
于 2013-09-19T18:38:51.623 回答
0

你实际上应该做相反的事情。

List<Project> object = getProjects()哪里getProjects()返回一个List<MassEditionObject>

AProject是一个MassEditionObject。AMassEditionObject不一定是Project

由于我上面的代码在您的情况下没有意义,您可以这样做

List<Project> object = getProjects()getProjects你现在一样。

或者也可以查看@Kayaman的回答。

于 2013-09-19T18:36:56.960 回答
0

将返回类型更改为 getObjects 为

public List<? extends Project> getObjects();

你可以像这样使用它

List<Project> objs = getObjects();

List<MassEditionObject> mObjs = (List<MassEditionObject>)getObjects();
于 2013-09-19T18:44:10.710 回答