1

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

这就是我所拥有的:

class MyClass extends ExternalTrait with Logging

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

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

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

非常感谢。

4

1 回答 1

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
}
于 2012-09-14T11:45:13.690 回答