私は、これらのパラメータがすべて同じ基本クラスから拡張されている場合、パラメータの型が異なる複数の異なるコンストラクタを持つクラスを持っています。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)
どのようにパラメータの種類に応じて、使用する正しいコンストラクタを選択するランタイムで?
私はこれを取得していますエラー:caseクラスSpecificDataTypeOneは、祖先のGeneralDataTypeを持ちますが、大文字と小文字の継承は禁止されています。この制限を克服するには、抽出子を使用して、非リーフノードのパターンマッチングを行います。 –