子类中的Scala类型参数绑定错误,但不是超类

时间:2011-07-27 18:11:10

标签: scala

为什么不做以下工作?

scala> class Foo[B<:Foo[B]]
defined class Foo

scala> class Goo[B<:Foo[B]](x: B)
defined class Goo

scala> class Hoo[B<:Hoo[B]] extends Foo[Hoo[B]] { def f = new Goo(this) }
defined class Hoo

scala> class Ioo extends Hoo[Ioo] { def g = new Goo(this) }
<console>:11: error: inferred type arguments [Ioo] do not conform to class Goo's type parameter bounds [B <: Foo[B]]
       class Ioo extends Hoo[Ioo] { def g = new Goo(this) }
                                            ^

scala> class Ioo extends Hoo[Ioo] { f } // yet this works!
defined class Ioo

1 个答案:

答案 0 :(得分:2)

this中的

Goo(this)必须为B <: Foo[B]。这是我,所以我们需要Ioo <: Foo[Ioo]

IooHoo[Ioo],因此Foo[Hoo[Ioo]]Hoo的继承),不提供Foo[Ioo]