Scala: Как получить значения параметров по умолчанию с помощью MethodMirror? - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу использовать отражение scala для создания класса наблюдений из карты. Как заполнить список параметров значением по умолчанию, если на карте ввода нет соответствующего ключа?

def parser[T: TypeTag: ClassTag](args: Map[String, _]) = {
    val rm = runtimeMirror(classTag[T].runtimeClass.getClassLoader)
    val classSymbol = typeOf[T].typeSymbol.asClass
    val classMirror = rm.reflectClass(classSymbol)
    val constructor = typeOf[T].declaration(nme.CONSTRUCTOR).asMethod
    val constructorMirror = classMirror.reflectConstructor(constructor)

    val constructorArgs = constructor.paramss.flatten.map(param => {
      val paramName = param.name.toString
      if (param.typeSignature <:< typeOf[Option[Any]])
        args.get(paramName)
      else
        args.getOrElse(paramName, "Default Value") //how to get default value here
    })

    constructorMirror(constructorArgs:_*).asInstanceOf[T]
  }

В приведенных выше кодах возможно ли получить значение по умолчанию для параметров в args.getOrElse(paramName, "Default Value")?

...