Scala类型边界与Foo [_]

时间:2013-12-07 21:15:24

标签: scala generics types type-bounds

我有class Bar[T <: Foo]。类型Bar[_ <: Foo]Bar[_]之间有什么区别?我没有看到任何语义差异,因为我不能写new Bar[String]("asdf")之类的任何东西。

然而,scalac确实区分了它们。看起来它会忘记边界并将Bar[_]视为Bar[_ <: Any]而不是Bar[_ <: Foo]

请注意,与Scala不同,这在Java中可以正常工作:https://gist.github.com/v6ak/7847548。我想知道Java和Scala之间是否存在重要的语义差异我不知道。我知道存在一些差异,例如在具有原始类型的泛型中(特别是与数组一起使用时),但我不知道与此问题相关的任何内容。

为了让事情变得更加奇怪,我已经从the mentioned scala codereJ)反汇编了字节码,禁用了泛型识别,发现method foo returns always a Foo

(我没有使用javap,因为我无法在那里禁用泛型识别。)

1 个答案:

答案 0 :(得分:3)

所有示例都在当前里程碑2.11.0-M7中编译。

相关提交:this onethis one。似乎这已在2.11.0-M3中修复。

相关问题