3

我有一个class Bar[T <: Foo]。typeBar[_ <: Foo]和 和有什么不一样Bar[_]?我没有看到任何语义上的差异,因为我不能写任何类似new Bar[String]("asdf").

但是,scalac确实将它们区分开来。看起来它忘记了界限并认为Bar[_]是 aBar[_ <: Any]而不是Bar[_ <: Foo]

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

为了让事情变得更奇怪,我从提到的 scala 代码(通过reJ)中反汇编了字节码,禁用了泛型识别并发现方法 foo 总是返回一个 Foo

(我没有使用 javap 因为我不能在那里禁用泛型识别。)

4

1 回答 1

3

All of your examples compile in current milestone, 2.11.0-M7.

Relevant commits: this one and this one. It seems that this was fixed in 2.11.0-M3.

于 2013-12-07T21:58:59.993 回答