我需要知道泛型类型是否是字符串,以便对其执行不同的逻辑,例如:
def compute[A](field: String, record: GenericRecord): A match {
case String => record.get(field).asInstanceOf[Utf8].toString
case _ => record.get(field).asInstanceOf[A]
}但我不知道怎样才能得到这类药。
发布于 2018-11-29 00:43:23
如果不需要处理嵌套类型,可以使用ClassTag进行匹配,如果需要,可以使用TypeTag:
import scala.reflect.{ClassTag, classTag}
def compute[A: ClassTag](field: String, record: GenericRecord): A = {
if (classTag[A] == classTag[String]) {
record.get(field).asInstanceOf[Utf8].toString.asInstanceOf[A]
} else {
record.get(field).asInstanceOf[A]
}
}对于TypeTag,则导入scala.reflect.runtime.universe.{TypeTag, typeTag},并将ClassTag改为TypeTag,将classTag更改为typeTag。
发布于 2018-11-28 23:55:10
也许像这样的东西(可能是可以优化的):
import scala.reflect.ClassTag
def m[A](x: Any)(implicit tag: ClassTag[A]): A = {
tag.toString match {
case "java.lang.String" =>
(x.toString + " is a string").asInstanceOf[A]
case _ =>
x.asInstanceOf[A]
}
}
println(m[String]("123")) // 123 is a string
println(m[Int](456)) // 456https://stackoverflow.com/questions/53529536
复制相似问题