路径依赖从内部类谈起
在java中所有的内部类都属于同一类型(外部类 )
但是 scala中内部类必须依赖外部类的实例 ,不同的外部类实例,内部类都是不同的。
我们把对外部类的依赖称之为路径依赖类型 (path_dependent_type)
在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博客 ” ,链接:http://blog.itpub.net/28912557/viewspace-1980404/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28912557/viewspace-1980404/