给定
Any
类型的值- 与所需类型相对应的
TypeTag
如何转换值
不幸的是,以下代码片段无法编译
val v: Any = 123
val tag = typeTag[Int]
val i = v.asInstanceOf[t.tpe]
最佳答案
使用这个
import scala.reflect.ClassTag
def getTypedArg[T: ClassTag](any: Any): Option[T] = {
any match {
case t: T => Some(t)
case invalid =>
None
}
}
使用
scala> getTypedArg[Int](5)
res1: Option[Int] = Some(5)
scala> getTypedArg[Int]("str")
res2: Option[Int] = None
来源:Retrieve class-name from ClassTag
EDIT-1
按照@Aki的要求,通过这个 hack,它也可以与 TypeTag
一起使用
import reflect.runtime.universe._
import scala.reflect.ClassTag
def typeToClassTag[T: TypeTag]: ClassTag[T] = {
ClassTag[T]( typeTag[T].mirror.runtimeClass( typeTag[T].tpe ) )
}
def getTypedArg2[T: TypeTag](any: Any): Option[T] = {
implicit val c: ClassTag[T] = typeToClassTag[T]
any match {
case t: T => Some(t)
case invalid =>
None
}
}
关于scala - 在 Scala 中,当 TypeTag 可用时如何转换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886227/