假设我有以下代码:
trait Trait1 {
trait Inner {
val name = "Inner1"
}
}
trait Trait2 {
trait Inner {
val name = "Inner2"
}
}
class Foo extends Trait1 with Trait2 {
// I want Concrete1 to be a Trait1.Inner not a Trait2.Inner
class Concrete1 extends Inner
val c = new Concrete1
}
object Obj {
def main(args: Array[String]): Unit = {
val foo = new Foo
println(foo.c.name)
}
}
Run Code Online (Sandbox Code Playgroud)
当我在混合Trait1和Trait2,指的Inner似乎默认为Inner取其特点我混入第二类型; 所以当我打电话Obj的main方法打印时Inner2.我怎么可以参考Trait1.Inner的Foo?以下所有三个都给出了编译器错误:
class Concrete1 extends Trait1.Inner
class Concrete1 extends Trait1$Inner
class Concrete1 extends Trait1#Inner
Run Code Online (Sandbox Code Playgroud)
代替
class Concrete1 extends Inner
Run Code Online (Sandbox Code Playgroud)
用这个
class Concrete1 extends super[Trait1].Inner
Run Code Online (Sandbox Code Playgroud)
这应该会得到你想要的