给定
trait Foo[T <: Bar] {
def foo: T
}
为什么编译器不解释像签名
def foo(f: Foo[_])
意味着未知_
一定是一种类型Bar
。相反,它迫使我这样做
def foo(f: Foo[_ <: Bar])
这会使签名复杂化。我敢肯定,编译器必须是正确的,我错过了一些细微之处,但显然Foo[X]
那里X
是不是某种Bar
所以不可能通过建设,为什么?
谢谢。
简而言之-似乎是编译器的缺陷,也是是否解决该问题的一个公开问题。修复它可能会带来意想不到的后果,但是它经常被提出来以至于仍然被认为是可能的修复方法。这是一些最相关且仍在打开的Bug门票。
PS看来Dotty确实尊重这样的界限,所以他们很可能会解决它!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句