多态性混合对象,列表和接口

时间:2014-04-23 09:39:09

标签: java polymorphism

我今天的问题是关于这3个功能:

public void generateCalendarEvents(final String id,final Map<String,String> params);    
public void generateCalendarEvents(Object object,final String id,final Map<String,String> params);
public void generateCalendarEvents(List<Identifiable> objets,final Map<String,String> params);// Identifiable is an Interface

根据上下文调用它们,例如:

generateCalendarEvents(someString,params); // params is a Map<String,String>
generateCalendarEvents(this,someString,params);
generateCalendarEvents(this.getDataList(),params); // getDataList return a list of objects implementing the "Identifiable" interface

这两个第一次运作良好,但我收到了第三个编译错误的说法:

  

AbstractController类型中的generateCalendarEvents(String,Map)方法不适用于参数        (List,null)

我不明白为什么编译器无法将此调用与第三个函数匹配...以及当至少有一个人认为它可能在List和Object之间混淆时,为什么它与第一个函数混淆。 这可能是基本的,但我在这里看不到解决方案。

这里有什么想法吗?

提前致谢。

PS:显然在这里,我可以简单地给这三种方法命名。我只想深入了解多态性。

1 个答案:

答案 0 :(得分:1)

这样的耻辱.....问题不在于多态性。 但通常,明确提出的问题有助于找到解决方案。

所以问题出在我发送List&lt;的方式上。 Idenfiable&gt;:我假设返回List的getDataList()方法将被转换为List&lt;识别&GT; ..

它不是......所以解决问题的方法是:

List<Identifiable> rdvs = new ArrayList<Identifiable>();
rdvs.addAll(this.getDataList());              
generateCalendarEvents(rdvs,new HashMap<String,String>());

这里的任何评论都是受欢迎的......因为即使我设法让它发挥作用,我也不能确定为什么我不能按照以前的方式去做。