打印类型参数的类型

时间:2015-09-18 17:02:44

标签: scala

假设:

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

1 个答案:

答案 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])