Я пытаюсь получить типы аргументов определенной функции в 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
Считаете ли вы, что это хороший подход?