假设:
scala> def f[A]: Unit = ???
f: [A]=> Unit
我想替换定义以打印A
的类型。
还有其他选择:
scala> def f[A](implicit manifest: scala.reflect.Manifest[A]) = manifest.toString
f: [A](implicit manifest: scala.reflect.Manifest[A])String
scala> f[String]
res10: String = java.lang.String
答案 0 :(得分:12)
实际上并没有打印出类型,它会打印出来。
scala> f[List[Int]]
res17: String = scala.collection.immutable.List[Int]
使用TypeTag
获取类型信息。但不,没有更简单的方法。由于这是在运行时发生的,因此您需要TypeTag
来保存类型信息。
scala> import scala.reflect.runtime.universe.{TypeTag, typeOf}
import scala.reflect.runtime.universe.{TypeTag, typeOf}
scala> def f[A](implicit tt: TypeTag[A]): Unit = println(typeOf[A])
f: [A](implicit tt: reflect.runtime.universe.TypeTag[A])Unit
scala> f[List[Int]]
scala.List[Int]
我们可以使用上下文绑定语法使看起来更简洁:
def f[A : TypeTag]: Unit = println(typeOf[A])