Получить аргументы FunctionX и типы вывода - PullRequest
0 голосов
/ 20 сентября 2018

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

Считаете ли вы, что это хороший подход?

...