假设我有一个MethodMirror
为对象的某个方法创建的实例。通过镜像的字段,我可以轻松访问方法的返回类型和参数。但我实际上需要获取此方法将具有的类型作为函数。
这是一个玩具代码示例,可以帮助我解释我想要实现的目标。我正在使用 Scala 2.11.6。
import scala.reflect.runtime.universe._
object ForStackOverflow {
object Obj {
def method(x:String, y:String):Int = 0
def expectedRetType():((String, String) => Int) = ???
}
def main(args: Array[String]) {
val mirror:Mirror = runtimeMirror(getClass.getClassLoader)
val instanceMirror = mirror.reflect(Obj)
val methodSymbol:MethodSymbol = instanceMirror.symbol.toType.decl(TermName("method")).asMethod
val methodMirror = instanceMirror.reflectMethod(methodSymbol)
println(methodMirror.symbol.returnType)
println(methodMirror.symbol.paramLists(0).map { x => x.info.resultType }.mkString(", "))
val expectedSymbol:MethodSymbol = instanceMirror.symbol.toType.decl(TermName("expectedRetType")).asMethod
println("I would like to produce from a 'methodMirror' this: "+expectedSymbol.returnType)
}
}
我想从代表函数Type
的实例中生成实例。methodMirror
对于这个例子,它应该是(String, String) => Int
. 我更喜欢一个不太依赖于具体 ScalaFunctionX
类的解决方案。