1

に続く:

型パラメーターの Scala classOf

私はそれを実装しようとしましたが、いくつかの奇妙なジェネリックの問題が発生しているようです.

私は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))
  }
}

とにかく、上記のコードは次のコンパイル エラーを生成しています。

型の不一致; found : res.type (基になる型が Any の場合) required: 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))
    }
  }
}
4

1 に答える 1

3

私が覚えている限りでは、 の代わりに をclassManifest[T].erasure返すので、 の結果はまたは タイプになります。解析結果をキャストすることができます:Class[_]Class[T]jsonSerializer.readValue(...)Any

val res = jsonSerializer.readValue(s,  classManifest[T].erasure).asInstanceOf[T]
于 2012-06-15T10:29:25.207 に答える