1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
trait U {
trait U1 {
class X
}
type U11 <: U1
val u : U11 = null.asInstanceOf[U11]
}
trait A extends U
trait B extends U {
def foo = ""
class U11 extends U1 { class X extends super.X { foo } } // refer to foo to add $outer pointer
override val u = new U11
}
class C {
val ab: A with B = new A with B // `B with A` works.
def foo {
// fails
new ab.u.X
// works:
val u = ab.u
new u.X
}
}
object Test {
def main(args: Array[String]) {
// java.lang.NoSuchMethodError: A.u()LB$U11;
// at C.foo(t6677b.scala:23)
new C().foo
}
}
|