Я изо всех сил пытаюсь получить типы аргументов определенной функции в 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
Вы считаете, что это хороший подход?
fnInput
на самом деле исходит из строки. Строка компилируется во время выполнения (с использованием панели инструментов), затем я хотел бы проверить типы функций, чтобы перенаправить их в базовый код. - person aitorhh   schedule 20.09.2018