gpt4 book ai didi

Scala 类型边界与 Foo[_]

转载 作者:行者123 更新时间:2023-12-02 00:02:30 24 4
gpt4 key购买 nike

我有一个 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 code 中反汇编了字节码。 (通过 reJ ),禁用泛型识别并发现 method foo returns always a Foo .

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

最佳答案

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

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

关于Scala 类型边界与 Foo[_],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20446736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com