我正在努力获取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
您认为这是个好方法吗?