Supongamos que tengo el siguiente código:contradictorios rasgos heredados anidados
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)
}
}
Cuando mezclo en Trait1
y Trait2
, en referencia a Inner
parece por defecto el tipo de cualquier rasgo que mixin segundo Inner
; entonces cuando llamo al Obj
main
metodo imprime Inner2
. ¿Cómo puedo consultar Trait1.Inner
en Foo
? Los tres de los siguientes dar errores de compilación:
class Concrete1 extends Trait1.Inner
class Concrete1 extends Trait1$Inner
class Concrete1 extends Trait1#Inner
Eso es genial, ahora puedo escribir Class Concrete1 extends super [Trait1] .Inner y class Concrete2 se extiende super [Trait2] .Inner y tiene instancias de ambos tipos de Inner en Foo. – ams