获取FunctionX参数和输出类型

时间:2018-09-20 09:12:30

标签: scala scala-reflect

我正在努力获取Scala中已定义函数的参数类型。例如Funcion1[T1, T2]

由于Java将消除类型检查(编译器警告:is unchecked since it is eliminated by erasure),因此我想找到一种方法来match对其类型起作用。

目标是能够具有与以下功能相同的功能:

val fnInput = {x: Map[String, Double] => x}

fnInput match {
    case f: Function1[Map[String, Double], Map[String, Double]] => ???
    case f: Function1[T1, T2] => ???
    case f: Function2[T1, T2, T3] => ???
}

但是,请检查参数类型。

已更新:到目前为止,我的解决方案将使用以下工具

import scala.reflect.runtime.universe._
def getType[T: TypeTag](obj: T) = typeOf[T]
val t = getType({x: Map[String, Any] => x})
// check first argument
typeOf[Map[String, Int]] <:< t.typeArgs(0)

// check return of Function1
typeOf[Map[String, Int]] <:< t.typeArgs(1)

// t.typeArgs.length will return the number of arguments +1

您认为这是个好方法吗?

0 个答案:

没有答案