Scala路径依赖

路径依赖从内部类谈起
在java中所有的内部类都属于同一类型(外部类)
但是scala中内部类必须依赖外部类的实例,不同的外部类实例,内部类都是不同的。
我们把对外部类的依赖称之为路径依赖类型(path_dependent_type)

class Outer {
    private val x = 10
    class Inner {
        private val y = x + 10 //内部类隐含持有外部类的实例,所以能使用外部类的private成员
    }
}
object Path_Dependence {

  def main(args: Array[String]){
    val outer = new Outer //outer就是inner、inner2的路径,在Scala中,不同的路径代表着不同的类型
    val inner = new outer.Inner //构建内部类,区别于java语法(outer.new Inner())
    val inner2: outer.Inner = new outer.Inner
    
    val o1 = new Outer
    val o2 = new Outer
    val i: o2.Inner = new o1.Inner //编译器会报错,type mismatch;found o1.Inner, required o2.inner
    val i: Outer#Inner = new o1.Inner //o1.Inner是Outer#Inner的子类,类似于java,不同内部类属于同一外部类类型,这叫类型投影,type_projection
        
  }
}

你可能感兴趣的:(Scala路径依赖)