我有以下代码:
List<MassEditionObject> objects = getProjects();
其中MassEditionObject
是由Project
类实现的接口。
getProjects()
返回List<Project>
,看起来应该没问题,因为Project是一个MassEditionObject。
然而,Eclipse给了我这个错误:
Type mismatch: cannot convert from List<Project> to List<MassEditionObject>
我理解界面的一般概念以及如何使用它们,我只是不确定为什么这是无效的。
谢谢,如果此问题已发布,我很抱歉。我搜索并发现了类似的情况,但没有人回答这个问题。
答案 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>
。
Project
是MassEditionObject
。 MassEditionObject
不一定是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();