格继承下的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
。但是在traitC
中,我无法通过调用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
是路径依赖类型。