2016-06-30 15 views
2

Ich habe eine Reihe von Merkmalen/Klasse wie:Implizite Konvertierung von Klassenbaum

trait Parent 
case class ChildA(str: String) extends Parent 
case class ChildB(str: String) extends Parent 

object Parent { 
    implicit def toA(str: String) = ChildA(str) 
    implicit def toB(str: String) = ChildB(str) 
} 

und das funktioniert für den Fall der Umwandlung für ChildA oder ChildB ok.

Auf meinen Tests möchte ich, dass eine zusätzliche Regel haben, wenn ein Verfahren zur Herstellung eines Parent erhält es so etwas wie:

implicit def toParent(str: String) = ChildA(str) 

Wie das ich tun? Der Compiler scheint verwirrt zu sein, da er mehrere Conversions zu Parent auswählen kann.

+0

Eine Instanz eines untergeordneten Elements enthält immer Eigenschaften des übergeordneten Elements. Was versuchst du zu machen? Sieht nach dem [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) für mich aus. –

Antwort

2

Wenn Sie toA als toB für Konvertierungen zu Parent auswählen möchten, können Sie den Mechanismus impliziter Prioritäten verwenden. Ein Implizit hat eine niedrigere Priorität, wenn es von einer Klasse oder einem Merkmal geerbt wird.

Verwandte Themen