如何访问姐妹特征中的受保护变量

时间:2012-09-14 11:32:07

标签: scala

我在我的应用程序中使用了Logging trait,我很好奇是否可以从Logging trait中访问受保护的变量。

这就是我所拥有的:

class MyClass extends ExternalTrait with Logging

trait ExternalTrait {
  protected val protectedVar = "secret?"
}

trait Logging {
  if(this.isInstanceOf[OtherTrait]) 
    this.asInstanceOf[OtherTrait].protectedVar
}

但以这种方式访问​​时,对受保护变量的访问受到限制。是否有其他方法可以从Logging trait中访问protectedVar?

非常感谢。

1 个答案:

答案 0 :(得分:3)

如果你明确知道后来Logging混入了ExternalTrait,你可以自我引用:

trait Logging { this: ExternalTrait =>
  val value = protectedVar
}

当然,如果可能存在不扩展/混合其他特征的记录特征,则自我引用不适合。在这种情况下,我会将Logging子类化以处理不同的行为。

trait Logging
trait StandAloneLogging extends Logging
trait BasedOnLogging extends Logging { this: ExternalTrait =>
  val value = protectedVar
}