Ich habe eine Klasse mit mehreren verschiedenen Konstruktoren, die sich in den Typen von Parametern unterscheiden, wenn alle diese Parameter von derselben Basisklasse ausgehen.Scala - Konstruktor nach Laufzeittyp auswählen Konstruktorargumente
Sehen Sie hier für ein vereinfachtes Beispiel:
abstract case class GeneralDataType()
case class SpecificDataTypeOne() extends GeneralDataType
case class SpecificDataTypeTwo() extends GeneralDataType
case class MyNumber(myDataType: Int) extends {
def this(data: SpecificDataTypeOne) = this(1)
def this(data: SpecificDataTypeTwo) = this(2)
}
def getDataType(typeId: Int): GeneralDataType = typeId match {
case 1 => new SpecificDataTypeOne
case 2 => new SpecificDataTypeTwo
}
val x = getDataType(1)
// error: Cannot resolve constructor
val mn = new MyNumber(x)
Wie in Runtime den richtigen Konstruktor zu verwenden, entsprechend den Parametertypen zu wählen?
in Eclipse Ich erhalte diese error: case-Klasse SpecificDataTypeOne hat den case-Vorgänger GeneralDataType, aber die fallweise Vererbung ist unzulässig. Um diese Einschränkung zu umgehen, verwenden Sie Extraktoren, um die Übereinstimmung von Mustern auf Nicht-Blattknoten zu ermitteln. –