У меня есть класс с несколькими разными конструкторами, которые различаются по типам параметров, когда все эти параметры распространяются от одного и того же базового класса.Scala - выбрать конструктор по времени выполнения аргументов конструктора
Смотрите здесь упрощенный пример:
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)
Как во время выполнения, чтобы выбрать правильный конструктор для использования, в соответствии с типами параметров?
в затмении я получаю это error: case class SpecificDataTypeOne имеет предка GeneralDataType, но наследование на случай отказа. Чтобы преодолеть это ограничение, используйте экстракторы для соответствия шаблону на нелистовых узлах. –