如何在Scala中打印出列表的类型?

Bob*_*sky 3 reflection scala type-erasure

这是我正在尝试做的一个例子:

val ex = List[String]("a", "b", "c") typePrinter(ex) //prints out "List[String]"

这可能在Scala中吗?标准.getClass似乎不适用于此.谢谢!

Ast*_*rid 7

柴坦尼亚的做法是正确的.也就是说,我的理解是在Scala 2.12中ClassTag并且TypeTag优先于Manifest.以下是一种方法TypeTag:

import scala.reflect.runtime.universe._


def getClassName[T : TypeTag](input: T) : String = {
  typeOf[T].toString
}
val ex = List[String]("a", "b", "c")
println(getClassName(ex)) // prints "List[String]"
Run Code Online (Sandbox Code Playgroud)

这样做的原因是类型擦除意味着在运行时,您List使用泛型参数声明的事实String根本就不存在了.添加开往上下文ClassTagTypeTag意味着你介绍一个隐含参数ClassTag[T]或者TypeTag[T],该编译器会为你当它遇到的依赖.这些参数对将丢失的类型信息进行编码,并且可以在类似于typeOf提取类型信息的方法中使用,而不是类实例本身可用的类型信息.