使用Scala反射查找大多数派生的运行时类型
发布时间:2020-12-16 09:06:07 所属栏目:安全 来源:网络整理
导读:我正在尝试使用 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]) { v
我正在尝试使用
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) } } 这里有一个类型Array [Any]所以每个发送到checkType的项都有Any类型.结果,checkType输出 typeOf[A]: Any typeOf[A]: Any 这对我来说很有意义,因为TypeTag是由编译器在调用时生成的(其中所有知道类型的是它是Any).但是,我想要确定每个项目的实际类型.我想输出一些东西 Int String 我在这里查看了文档 http://docs.scala-lang.org/overviews/reflection/overview.html 但是样本似乎并没有涵盖这种情况,我发现环境,宇宙和镜子的讨论难以渗透.似乎我想要做的事情应该相当简单,但也许我正在接近它完全错误. 解决方法
最明显的解决方案是使用该类:
def checkType[A](item: A) { println("typeOf[A]: " + item.getClass) } 但是如果你想使用Type,那么还需要做一些额外的工作: def checkType[A](item: A) { val mirror = runtimeMirror(this.getClass.getClassLoader) println("typeOf[A]: " + mirror.classSymbol(item.getClass).toType) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |