Passing type information to function in Scala
I have code that does some common operation on json objects, namely extract. So what I would like to create generic function that takes type parameter which class to expect, code looks like as follows:
def getMessageType[T](json: J开发者_如何学GoValue): Either[GenericError,T] = {
try {
Right(json.extract[T])
} catch {
case e: MappingException => jsonToError(json)
}
}
The issue is how to pass T information to that function ?
If you look at the definition of extract: you will see that it takes a
Manifest
implicitly:
def extract[A](json: JValue)
(implicit formats: Formats, mf: Manifest[A]): A
This gets around JVM type erasure by taking the "type" in as a value. For your case, I think you should do the same thing:
def getMessageType[T](json: JValue)
(implicit f: Formats, mf: Manifest[T]): T =
{
json.extract[T]
}
This:
Gives your method implicit parameters, which must be fulfilled by the caller.
Creates (those same) implicit parameters to pass them on to
extract
.
精彩评论