Hier ist mein Problem:Scala implicits und Überschreibungen Probleme
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"))
}
}
Wie man sehen kann ich zu wiederholen halten Sie den Code für: parseEntity
Methode. Wenn ich eine FloatCaller
hinzufügen wollte, müsste ich parseEntity
neu schreiben, obwohl seine Implementierung die gleiche wäre.
Wie kann ich die Implementierung der parseEntity in die Caller
schreiben, damit ich nicht immer wieder den gleichen Code in die Kindmerkmale schreiben muss?
Haftungsausschluss: Dies ist eine Vereinfachung eines echten Problems, das ich mit SprayJsonSupport
von akka.http.scaladsl.marshallers.sprayjson
habe.