【Scala类型系统】自身类型(self type)引用

定义

特质可以要求混入它的类扩展自另一个类型,但是当使用自身类型(self type)的声明来定义特质时(this: ClassName =>),这样的特质只能被混入给定类型的子类当中。
如果尝试将该特质混入不符合自身类型所要求的类时,就会报错。

从技术角度上看,自身类型是在类中提到this时,对于this的假设性类型。从实用角度上看,自身类型指定了对于特质能够混入的具体类的需求。如果你的特质仅用于混入另一个或几个特质,那么可以指定那些假设性的特质。

自身类型在依赖注入的应用

在通过组件构建大型系统,而每个组件都有不同的实现的时候,我们需要将组件的不同选择组装起来。通常组件之间存在某种依赖关系,比如,数据访问组件可能会依赖日志功能。
每个组件都描述了它所依赖的其他组件的接口,而对实际组件实现的引用是在应用程序被组件起来的时候“注入”的。
对于Scala来说,可以通过特质和自身类型达到简单的依赖注入的效果。

自身类型实现依赖注入

对于日志功能trait Logger {def log(msg: String)},它有两个实现:ConsoleLoggerFileLogger
用户认证特质有对日志功能的依赖,用于记录认证失败:

trait 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值