devirtualize.txt

来自「JAVA 语言的函数式编程扩展」· 文本 代码 · 共 57 行

TXT
57
字号
 /*    class A {      class C[X, Y](x: X) <: { var y = x ; def f(z: Y): X }      class D[Y](z) extends C[Int, Y](f(z)) { override def f(z:Int) = 3 }    }    class B extends A {      class C[X, Y](x: X) <: { def g = 2 }    }  */  class A {    type C[X, Y] <: CT[X, Y]    trait CT { self: C => protected[this] val x: Int; val y = x; def f(z:Int) = z + 1 }    type D <: C with DT    trait DT extends { self: D => def f(z:Int) = z + 2 }    trait preDT extends { self: D => val z: Int; val x = f(z) }    def newC(x: Int): C    def newD(x: Int): D    //type C = CT    //type D = C with DT    class CC(_x:Int) extends { val x = _x } with CT    def newC(x:Int): C = new CC(x).asInstanceOf[C]    class DC(_z:Int) extends { val z = _z } with preDT with CT with DT {      override def f(z:Int) = super.f(z)    }    def newD(z:Int):D = new DC(z).asInstanceOf[D]  }  class B extends A {    type C <: CT with CT2    trait CT2 { self : C => def g = 2 }    //type C = CT with CT2    //type D = C with DT    class CC2(_x:Int) extends { val x = _x } with CT with CT2    def newC(x:Int): C = new CC2(x).asInstanceOf[C]    class DC2(_z:Int) extends { val z = _z } with preDT with CT with CT2      with DT { override def f(z:Int) = super.f(z) }    def newD(z:Int): D = new DC2(z).asInstanceOf[D]  }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?