使用 scala ClassTags 我发现当您将它与 AnyVal 对象一起使用时,classTag.runtimeClass.isInstance 无法正常工作。这是一个片段,您可以在其中对其进行测试。有什么想法可以使它适用于 AnyVal 对象吗?
import scala.reflect.ClassTag
import scala.reflect.runtime.{universe => ru}
object Test {
def extractField[U: ru.TypeTag](json: Map[String, Any], field: String)(implicit classTag: ClassTag[U]): Option[U] = {
json.get(field) match {
case Some(value) =>
if(classTag.runtimeClass.isInstance(value))
Some(value.asInstanceOf[U])
else {
None
}
case _ =>
None
}
}
val map: Map[String,Any] = Map("k1" -> 2.0, "k2" -> "v")
extractField[Double](map,"k1") // RETURNS NONE
extractField[String](map,"k2") // RETURNS Some("v")
}
顺便说一句,我正在使用 Scala 2.10