2011-07-27 36 views
1

为什么以下工作不能?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 

回答

2

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

IooHoo[Ioo],因此Foo[Hoo[Ioo]](的Hoo继承),其并未给出Foo[Ioo]

相关问题