我今天的问题是关于这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:显然在这里,我可以简单地给这三种方法命名。我只想深入了解多态性。答案 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>());
这里的任何评论都是受欢迎的......因为即使我设法让它发挥作用,我也不能确定为什么我不能按照以前的方式去做。