我有一個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的。)