Scala Note – Reflection

原文:Fun with Scala’s new Reflection API (2.10)
反射是程序可以检查、甚至修改自身的能力。在面向对象编程、函数式编程和逻辑程序设计范型中都有着悠久的历史。虽然有些语言将反射作为一个指导原则,也有很多语言逐渐发展出了反射的API等能力。Scala也在2.10引入了新的反射API,这个API比老的Manifest更加接近了实际类型系统(编译器实际上使用了TypeTags,参考官方文档typetags-manifests )。Scala在Java反射API的基础上提供了反射的原因之一是JVM擦出了泛型类型。下面让我们看下泛型类型在运行时被擦除:


Scala 2.10引入了TypeTag,从而为泛型类型T的运行时带来了编译时信息。

另一个反射API的使用场景如下面的例子所示,抓取一个给定类型的对象内的所有成员,获得获得它们的泛型类型T并检查他们 是否混入了给定的特质Required,Scala的运行时mirror允许我们在运行时对于给定的实例去查找这些符号和类型(runtimeMirror(this.getClass.getClassLoader))。

^^

参考:
Reflection Overview

Posted in Dev, Java|Scala.