如何访问Scala中的“重写”内部类?

2024-07-03

我有两个特征,一个扩展另一个,每个都有一个内部类,一个扩展另一个,具有相同的名称:

trait A {
    class X {
        def x() = doSomething()
    }
}

trait B extends A {
    class X extends super.X {
        override def x() = doSomethingElse()
    }
}

class C extends B {
    val x = new X() // here B.X is instantiated
    val y = new A.X() // does not compile
    val z = new A.this.X() // does not compile
}

我如何访问A.X类中的C班级的身体?重命名B.X不隐藏A.X不是首选方式。

让事情变得有点复杂的是,在我遇到这个问题的情况下,特征具有类型参数(本示例中未显示)。


trait A {
    class X {
        def x() = "A.X"
    }
}

trait B extends A {
    class X extends super.X {
        override def x() = "B.X"
    }
}

class C extends B {
  val self = this:A
  val x = new this.X()
  val y = new self.X()
}

scala> val c = new C
c: C = C@1ef4b

scala> c.x.x 
res0: java.lang.String = B.X

scala> c.y.x
res1: java.lang.String = A.X
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问Scala中的“重写”内部类? 的相关文章

随机推荐