【发布时间】:2012-06-15 09:53:26
【问题描述】:
接下来是:
Scala classOf for type parameter
我已经尝试实现它,但似乎遇到了一些奇怪的泛型问题,实际上我现在已经搞砸了其中的几个,但这已经接近正确了,我可以得到它......
我正在使用 Scala - Jackson JSON 绑定(顺便说一句,优秀的库,比 SJson 容易得多)
def genparseResult[T: ClassManifest](t: T,s:String):Either[Tuple2[JsonParseException,String],T] = {
try{
val res = jsonSerializer.readValue(s, classManifest[T].erasure)
Right(res)
}
catch{
case jpe:JsonParseException => Left((jpe,s))
}
}
无论如何,上面的代码正在生成以下编译错误:
类型不匹配;找到:res.type(带有底层类型Any)需要:T
我一头雾水。上面的代码应该可以工作吗?
更新 根据天师的意见,我发布完成的课程
import com.fasterxml.jackson.core.JsonParseException
object DatasiftJsonMapper {
import java.util.Date
import com.fasterxml.jackson.databind.{ Module, ObjectMapper }
import com.fasterxml.jackson.module.scala.DefaultScalaModule
val jsonSerializer = {
val m = new ObjectMapper()
m.registerModule(DefaultScalaModule)
m
}
def parseDSResult(s: String): Either[Tuple2[JsonParseException, String], DatasiftResult] = {
genparseResult(classOf[DatasiftResult], s)
}
def parseQRegRequest(s: String): Either[Tuple2[JsonParseException, String], QRegRequest] = {
genparseResult(classOf[QRegRequest], s)
}
def genparseResult[T: ClassManifest](t: Class[T], s: String): Either[Tuple2[JsonParseException, String], T] = {
try {
val res = jsonSerializer.readValue(s, classManifest[T].erasure).asInstanceOf[T]
Right(res)
} catch {
case jpe: JsonParseException => Left((jpe, s))
}
}
}
【问题讨论】:
标签: scala types manifest type-erasure