我有代码对json对象执行一些常见操作,即提取。那么我想创建一个泛型函数,它接受类所需的类参数,代码如下:
def getMessageType[T](json: JValue): Either[GenericError,T] = {
try {
Right(json.extract[T])
} catch {
case e: MappingException => jsonToError(json)
}
}
问题是如何将T信息传递给该函数?
答案 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]
}
此:
提供方法隐式参数,调用者必须履行这些参数。
创建(相同的)隐式参数,将其传递给extract
。