Scala:如何使用MethodMirror获取参数的默认值?

时间:2018-11-08 08:21:12

标签: scala scala-reflect

我想使用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")中参数的默认值?

0 个答案:

没有答案