将类类型传递给Scala中的函数

时间:2017-07-05 19:40:45

标签: scala scala-reflect

我有一个具有此签名的功能;

def process[E: TypeTag : ClassTag](id: Int): E = {

通常我会这样称呼:

process[Item](1)

我需要从项目类型存储在变量中的地方调用它。

tt.tpe.members.collect {
  case m if m.isMethod && m.asMethod.isCaseAccessor => m.asMethod
} foreach { member => {
  // member is a MethodSymbol that can be used to get a type
  // how to call process[??](id) from here?

我假设我必须使用reflect或returnType,但是如何传递泛型类型?

1 个答案:

答案 0 :(得分:3)

您可以明确地将typeTagclassTag传递给该方法,它会从中推断出类型参数:

process(id)(typeTag, classTag)

要了解如何从TypeTag获取Type,请参阅here,并从ClassTag获取TypeTag,请查看here。 要从Type获取member,请使用member.returnType