56.Scala中Self Types实战详解


自身类型的第一个用途:

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 S1
class S2 { this : S1 => }   //这时,自身类型就有了额外的限定条件:在S2实例化时,必须混入指定的类型S1。用自身类型把当前的S2抽象化了,S2必须符合S1的类型。
                            //也可按照结构类型,要求当前self type具有什么样的行为,对其进行限制
class S3 extends S2 with S1   //若自身类型有约束的话,那么它的子类也必须满足约束条件


trait T { this : S1 =>}   //在trait中定义自身类型,若trait T想构建实例,必须混入S1
object S4 extends T with S1

object Self_Types_56 {
    def main(args: Array[String]): Unit = {
        
        val c = new S2 with S1

       }
  } 



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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值