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

到目前为止我所看到的一切,似乎都相当。

一些参考文献。 Martin Odersky 提及他们;谷歌的我的问题最受欢迎

  

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

有帮助吗?

解决方案

这是Martin Odersky对Scala用户邮件列表的回答:

  

原始Java通配符类型(如ECOOP论文中所述)   Igarashi和Viroli)确实只是存在主义的缩写   类型。有人告诉我,我已经阅读了FOOL '05关于Wild FJ的论文   通配符的最终版本有一些细微的差别   存在类型。我不知道究竟是什么意思(他们的   形式主义与古典存在主义类型相去甚远   能够查明差异),但也许仔细阅读Wild   FJ论文将对此有所了解。

所以看起来Scala存在类型和Java通配符似乎是等价的

其他提示

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

它们非常相似,但Scala的存在类型应该更强大。例如,Scala的存在类型可以是上限和下限,而Java的通配符只能是上限。

例如,在Scala中:

scala> def foo(x : List[_ >: Int]) = x
foo: (x: List[_ >: Int])List[Any]

foo获取具有Int下限的参数列表。

List [_] 符号(正如其他答案所指出的那样是对Java的 List [?] 更强大的模拟)是更一般的概念。

scroll top