【发布时间】:2015-08-05 03:27:39
【问题描述】:
我刚刚开始探索 Kotlin,我很好奇它在 Java 的核心动态绑定/调度语义之外还有多远。
假设我编写的代码如下所示:
类动物{ 有趣的添加(x:动物)=动物() } 对象马:动物 对象驴:动物 对象骡子:动物 有趣的 Horse.add(x:Horse) = Horse() fun Horse.add(x:Donkey) = Mule() 有趣的主要(参数:数组){ val h:动物 = 马 val d:动物 = 驴 val 孩子 = h + d }根据上面的代码——我可以期待会发生什么?由于 Horse 没有实现 add(Animal),我在运行时会失败吗?它能否在上述性质的调用中准确区分它们,其中被比较的值的编译时类型是 Animal(至少,如所写),但它们的运行时类型更具体?如果我们使用 var 而不是 val,它会改变什么吗?
提前致谢。
编辑:修改的核心代码——我看到第一响应者突出显示的问题,我没有想清楚。显然我还没有真正编译过这个,我还在概念层面上进行探索。
另外,我将在实际编译器中试一试,但我担心它会在某些情况下工作,而在其他情况下,它不会基于我不完全理解的某些标准。我无法找到有关如何在 Kotlin 中实现动态调度的参考文档(就此而言,我也不确定 Java 的情况;几个月前我写了一些我认为可以基于 JVM 文档工作的东西,但它没有't,而且我从来没有机会去探究究竟是为什么)。
无论如何再次感谢!
【问题讨论】: