自类型不符合基类



使用以下代码:

trait Hello[B <: Baz[_, _]]
trait World[F <: Foo] { self: Hello[Baz[F, _]] =>
def foo: F
}
trait Baz[F <: Foo, B <: Bar]
trait Foo
trait Bar
case class BasicHello() extends Hello[BasicBaz] with World[BasicFoo]
case class BasicBaz() extends Baz[BasicFoo, BasicBar]
case class BasicFoo() extends Foo
case class BasicBar() extends Bar

我在 IDE 的BasicHello案例类中收到以下错误:

Illegal inheritance, self-type BasicHello does not conform to Hello[Baz[F, _]]

我不知道为什么编译器不允许这样做,因为BasicHello扩展了Hello[BasicBaz],这反过来又扩展了Baz[BasicFoo, BasicBar]。应该Hello[Baz[Foo, Bar]]BasicHello的类型,这正是World混合所需的。自我类型是否缺少一些分层属性?

问题是HelloB中是不变的。因此,Hello[BasicBaz]不是Hello[Baz[BasicFoo,BasicBar]]的子类,即使BasicBazBaz的子类。

如果你在BHello协变 , (trait Hello[+B <: Baz[_,_]](,那么它就会编译。

相关内容

  • 没有找到相关文章

最新更新