格继承下的Scala内部类型

格继承下的Scala内部类型,scala,multiple-inheritance,inner-classes,Scala,Multiple Inheritance,Inner Classes,考虑以下代码: trait A { trait T def t: T } trait B1 extends A { trait T extends super.T def t: T } trait B2 extends A { trait T extends super.T def t: T } trait C extends B1 with B2 { trait T extends super.T // super.T means only B2.T, not B1

考虑以下代码:

trait A {
  trait T
  def t: T
}
trait B1 extends A {
  trait T extends super.T
  def t: T
}
trait B2 extends A {
  trait T extends super.T
  def t: T
}
trait C extends B1 with B2 {
  trait T extends super.T // super.T means only B2.T, not B1.T
  //trait T extends B1.T with B2.T // Actually I want to do this
  def t: T
}

这将发生编译错误,因为trait
C
中的类型
T
不继承
B1.T
。但是在trait
C
中,我无法通过调用
super.t
获得
B1.t
。我如何解决这个问题

通过在
B1
中定义
类型T1
,我可以解决此问题:

trait A {
  trait T
  def t: T
}
trait B1 extends A {
  trait T extends super.T
  protected type T1 = T
  def t: T
}
trait B2 extends A {
  trait T extends super.T
  def t: T
}
trait C extends B1 with B2 {
  trait T extends super.T with T1
  def t: T
}

在Scala中,您可以引用所需的特定超类:

trait C extends B1 with B2 {
  trait T extends super[B1].T with super[B2].T
  def t: T
}

直接说
trait T用B2.T扩展了B1.T有什么不对?这不会编译,因为
T
是路径依赖类型。