《你知道的JavaScript》——混合对象类

Posted worldover

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《你知道的JavaScript》——混合对象类相关的知识,希望对你有一定的参考价值。

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

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



2个开头的效果很好,但是我从第三个标题中得到了一个编译错误:


  类型为AbstractController的generateCalendarEvents(String,Map)方法不适用于该参数
       (列表,空)


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

这里有什么主意吗?

提前致谢。

PS:显然,在这里,我可以简单地给这三种方法起一个不同的名字。我只是想对多态性进行更深入的研究。

 

 

最佳答案

真可惜.....问题不在于多态性。
但通常,明确指出的问题有助于找到解决方案。

所以问题出在我发送List 的方式上:我假设返回List的getDataList()方法将被转换为List 。

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

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



这里的任何评论都是值得欢迎的...因为即使我设法使它起作用,但我也不完全确定为什么我不能采用以前的方法。

[人物存档]【HoneySelect2】【捏脸数据】人物鉴赏

技术图片
点击下载(谷歌云盘):http://raboninco.com/19ARW
技术图片
点击下载(谷歌云盘):http://raboninco.com/19ASk

以上是关于《你知道的JavaScript》——混合对象类的主要内容,如果未能解决你的问题,请参考以下文章

你不知道的js-混合对象-类

你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

你需要知道的 JavaScript 类(class)的这些知识

原生JavaScript实现对象的混合与克隆效果,带完整版解析代码[helpers.js]

原生JavaScript实现对象的混合与克隆效果,带完整版解析代码[helpers.js]

你不知道的JavasScript上篇·第四章·混合对象·类