【发布时间】:2017-05-03 08:14:58
【问题描述】:
我有一个需要 2 个特征的类,这两个特征都需要相同的特征。我该如何在这种情况下添加它
class RandomTest extends AbstractTestCase {
"asdasd" should "asdsda" in {
val a = new Application with XYZAppName with Session with MetricsPublisher
a.a()
}
abstract class Application extends Session with MetricsPublisher {
println("Application")
def a() : Unit = { println("application.a")}
}
trait RequiredAppContext {
println("RequiredAppContext")
val appName : String
}
trait MetricsPublisher extends RequiredAppContext {
this:RequiredAppContext =>
println("MetricsPublisher")
}
trait Session extends RequiredAppContext{
this:RequiredAppContext =>
println("Session")
lazy val appNameoverload = func(appName)
def func(value:String ) {println("appNameoverload "+appName)}
}
// implmentations
trait XYZAppName extends RequiredAppContext {
println("XYZAppName")
override val appName = "xyz"
}
}
这是该程序的输出:
[scalatest] RequiredAppContext
[scalatest] Session
[scalatest] MetricsPublisher
[scalatest] Application
[scalatest] XYZAppName
[scalatest] application.a
将 XYZAppName 初始化移动到 Session 之前的最佳方法是什么?
【问题讨论】:
标签: scala dependency-injection mixins