使用以下代码:
我在IDE中的
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]
,而Hello[BasicBaz]
又扩展了Baz[BasicFoo, BasicBar]
。 BasicHello
的类型应该是Hello[Baz[Foo, Bar]]
,这正是World
混入所需的类型。我是否缺少一些自身类型的层次性质?
Hello
不能变成协变的,改变自身类型注释就可以解决问题:self: Hello[_ <: Baz[F, _]] =>
。 - Régis Jean-Gilles