我正在尝试使用 Scala 2.10 反射来查找最派生的方法参数类型。例如,考虑这个程序:
import reflect.runtime.universe._
object ReflectionTest {
def checkType[A : TypeTag](item: A) {
println("typeOf[A]: " + typeOf[A])
}
def main(args: Array[String]) {
val a = Array(1, "Hello")
for (item <- a) checkType(item)
}
}
这里a
有 Array[Any] 类型,因此发送到的每个项目checkType
都有 Any 类型。结果,checkType
输出
typeOf[A]: Any
typeOf[A]: Any
这对我来说很有意义,因为 TypeTag 是由编译器在调用时生成的(它所知道的关于类型的所有信息就是它是Any
)。然而,我想要的是确定每个项目的实际类型。我想输出一些类似的东西
Int
String
我在这里查看了文档
http://docs.scala-lang.org/overviews/reflection/overview.html
但是样本似乎没有涵盖这种情况,我发现那里对环境、宇宙和镜子的讨论很难理解。看起来我正在尝试做的事情应该相当简单,但也许我完全错误地接近它。