传递类型信息以在Scala中运行

时间:2011-10-04 21:07:22

标签: function scala types

我有代码对json对象执行一些常见操作,即提取。那么我想创建一个泛型函数,它接受类所需的类参数,代码如下:

def getMessageType[T](json: JValue): Either[GenericError,T] = {
  try {
    Right(json.extract[T])
  } catch {
    case e: MappingException => jsonToError(json)
  }
}

问题是如何将T信息传递给该函数?

1 个答案:

答案 0 :(得分:7)

如果你看the definition of extract:你会发现它需要一个 隐含地Manifest

def extract[A](json: JValue)
    (implicit formats: Formats, mf: Manifest[A]): A

通过将“type”作为值来解决JVM类型擦除问题。为您 如果我认为你应该做同样的事情:

def getMessageType[T](json: JValue)
    (implicit f: Formats, mf: Manifest[T]): T =
{
    json.extract[T]
}

此:

  1. 提供方法隐式参数,调用者必须履行这些参数。

  2. 创建(相同的)隐式参数,将其传递给extract