56.Scala中Self Types实战详解

来源:互联网 发布:网络少年图片 编辑:程序博客网 时间:2024/05/16 09:49


自身类型的第一个用途:

class Self {  self =>    //self是this的别名,每个类都有个this指针,指向自己的实例。可以用除了this的其他任何名字。    val tmp = "scala"    def foo = self.tmp + this.tmp}object Self_Types_56 {    def main(args: Array[String]): Unit = {                 //自身类型的用途      class Outer{  outer =>   //相当于Outer.this          val v1 = "Spark"          class Inner{            println(outer.v1)  //在内部类使用外部类的属性/方法,在内部类做引用是很方便的          }      }    }} 

自身类型的第二个用途:

trait S1class S2 { this : S1 => }   //这时,自身类型就有了额外的限定条件:在S2实例化时,必须混入指定的类型S1。用自身类型把当前的S2抽象化了,S2必须符合S1的类型。                            //也可按照结构类型,要求当前self type具有什么样的行为,对其进行限制class S3 extends S2 with S1   //若自身类型有约束的话,那么它的子类也必须满足约束条件trait T { this : S1 =>}   //在trait中定义自身类型,若trait T想构建实例,必须混入S1object S4 extends T with S1object Self_Types_56 {    def main(args: Array[String]): Unit = {                val c = new S2 with S1       }  } 



参考资料来源于大数据梦工厂 深入浅出scala 第56讲 由王家林老师讲解