Scala之旅(TOUR OF SCALA)——自类型(SELF-TYPE)

自类型是声明一个特征必须继承另一个特征,甚至没有直接继承它的一种方式。这使得依赖成员在没有导入时就可以使用。

自类型就是一种缩小 this 类型或 this 别名的类型。语法看起来像普通函数的语法但是意思完全不同。

在特征中使用自类型,定义一个标识符,是另一个类型的特征和一个 => 。(例如: someIdentifier: SomeOtherTrait =>)。

trait User {
`   def username: String
}

trait Tweeter {
    this: User =>   // 重新赋值 this
    def tweet(tweetText: String) = println(s"$username: $tweetText")
}

class VerifiedTweeter(val username_: String) extends Tweeter with User {        // 我们混入 User 特征,因为 Tweeter 特征需要它
    def username = s"real $username_"
}

val realBeyoncé = new VerifiedTweeter("Beyoncé")
realBeyoncé.tweet("Just spilled my glass of lemonade")  // 会输出 “real Beyoncé: Just spilled my glass of lemonade”

因为 this: User => 自类型在 trait Tweeter 中,所以变量 username 就可以在 tweet 方法中使用。同时也意味着 VerifiedTweeter 类继承 Tweeter 特征时,必须混入 User 特征(使用 with User)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值