使用Scala ClassTags工作工作,我已經看到,當你與AnyVal對象使用classTag.runtimeClass.isInstance不能正常工作。這裏有一個你可以測試的片段。任何想法使這項工作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")
}
BTW,我使用Scala 2.10
這是一個斯卡拉錯誤? – Mikel
使用isInstanceOf代替isInstance http://stackoverflow.com/questions/26168721/difference-between-isinstance-and-isinstanceof – Samar
我不能使用value.isInstanceOf [U],因爲它是一個通用型的,所以我需要做使用經驗值(value.isInstanceOf [U]未被檢查,因爲被刪除消除) – Mikel