例如,Scala的存在类型和Java的通配符之间的区别?

比 Stack Overflow 问题更具体一点 什么是存在类型?,Scala 的存在类型和 Java 的通配符之间有什么区别,最好用一些说明性的例子来说明?

在我迄今为止所看到的一切中,它们似乎非常等同。

一些参考资料。马丁·奥德斯基提到了他们;谷歌对我的问题最热门

莫:原始通配符设计...受到存在主义类型的启发。事实上,原始论文具有存在类型的编码。但是,当实际的最终设计在Java中出现时,这种联系就有点丢失了。


答案 1

这是Martin Odersky在Scala用户邮件列表中的答案:

最初的Java通配符类型(如Igarashi和Viroli的ECOOP论文中所述)确实只是存在类型的简写。我被告知,我在FOOL '05关于Wild FJ的论文中读到,通配符的最终版本与存在类型有一些微妙的差异。我不知道究竟在什么意义上(他们的形式主义与经典的存在主义类型相去甚远,无法确定其中的区别),但也许仔细阅读Wild FJ的论文会对此有所了解。

因此,Scala存在类型和Java通配符似乎是等效的。


答案 2

它们应该是等效的,因为它们的主要目的是与Java的通配符进行交互。


推荐