2013-12-07 110 views
3

我有一個class Bar[T <: Foo]Bar[_ <: Foo]Bar[_]之間的區別是什麼?我沒有看到任何語義上的差異,因爲我不能寫任何像new Bar[String]("asdf")斯卡拉類型邊界與Foo [_]

然而,scalac的確區分它們。它看起來像忘記了界限,並認爲Bar[_]Bar[_ <: Any]而不是Bar[_ <: Foo]

請注意,這與Java中的預期工作方式不同,不像Scala:https://gist.github.com/v6ak/7847548。我不知道Java和Scala之間是否存在重要的語義差異,我不知道。我知道有一些差異,例如在具有原始類型的泛型中(尤其是與數組一起使用時),但我不知道與此問題有關的任何內容。

爲了讓事情變得更加陌生,我拆開了the mentioned scala code(通過reJ)的字節碼,禁用泛型識別,並且發現method foo returns always a Foo

在當前里程碑(我沒有,因爲我不能禁用泛型承認有使用javap的。)

回答

3

您所有的例子編譯,2.11.0-M7。

相關提交:this onethis one。看起來這是在2.11.0-M3中修復的。