2
这里是我的问题:斯卡拉implicits和覆盖问题
trait Caller {
type EntityType
def parseEntity(entity: String): EntityType
}
trait IntCaller extends Caller {
implicit def strToInt(s: String) = s.toInt
override type EntityType = Int
override def parseEntity(entity: String): EntityType = entity
}
trait DoubleCaller extends Caller {
implicit def strToDouble(s: String) = s.toDouble
override type EntityType = Double
override def parseEntity(entity: String): EntityType = entity
}
object main {
def main(args: Array[String]): Unit = {
val intCaller = new IntCaller{}
val doubleCaller = new DoubleCaller{}
println("Result is: " + intCaller.parseEntity("5"))
println("Result is: " + doubleCaller.parseEntity("5.0"))
}
}
正如你可以看到我不断重复的代码为:parseEntity
方法。如果我想添加一个FloatCaller
,我将不得不重写parseEntity
,即使它的实现是相同的。
如何在Caller
中写入parseEntity的实现,以便我不必一次又一次地在子特征中编写相同的代码?
免责声明: 这是一个真正的问题简化我与SprayJsonSupport
从akka.http.scaladsl.marshallers.sprayjson
。