路径依赖从内部类谈起
在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
-
-
}
-
-
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28912557/viewspace-1980404/
,如需转载,请注明出处,否则将追究法律责任。