反射 - 使用应用String参数

时间:2015-01-02 12:22:44

标签: scala reflection

如何找到给定Type的单个String参数的apply方法?

我有:

val param: String = ctx.request.uri.query.get(fName) //string param
val fType: scala.reflect.api.Type = field.typeSignature.resultType //desirable type 

编辑:

事实上,我想制作Spray.io指令,从请求到案例类提取许多参数。这里有一个例子:

https://gist.github.com/mgosk/25b9f01abf98eae159d1

  • 在第一步中,我根据默认参数(default function)
  • 创建案例类的实例
  • 在第二步中,我希望使用从HTTP请求中提取的参数(imbue函数)来填充此案例类

我想从gist改进这场大赛(line 109)。在这一刻,我提供了基本的scala类型,但我想为具有apply(foo:String)函数的用户定义类型添加处理。

1 个答案:

答案 0 :(得分:0)

我找到了答案:

val param: String = ctx.request.uri.query.get(fName) //string param
val fType: scala.reflect.api.Type = field.typeSignature.resultType //desirable type 

val classMirror = currentMirror.reflectClass(fType.typeSymbol.asClass)
val ctor = fType.decl(termNames.CONSTRUCTOR).asMethod
val value = classMirror.reflectConstructor(ctor).apply(param)

PS。它仅适用于具有相应构造函数的类