我正在尝试使用 Scala 2.10M7 中的新反射 API 来提取构造函数参数的注释。注释是用 Java 编写的,因为我在运行时需要它们,当我尝试在 Scala 中执行它们时,我收到了一条警告,建议我使用 Java。
我已经成功地为每个构造函数参数和注释获得了一个符号......但我最终得到了 ClassFileAnnotArg 类型的东西(下面的代码中的 av)。我不确定如何处理这些。查看源代码/scaladocs 似乎我想拆分一些案例类,但我不知道该怎么做。
我不认为这个问题特定于构造函数 args 上的注释,但我想为它们使用更详细的 scala 反射,不能只使用 Java 注释反射机制。
import scala.reflect.runtime._
val ty = universe.typeOf[Test1]
val constructors = ty.member(universe.nme.CONSTRUCTOR)
for (constructor<-constructors.asTerm.alternatives.map{_.asMethod}) {
println("Constructor = "+constructor)
println("Overloaded = "+constructor.isOverloaded)
for (pp<-constructor.params) {
println("Constructor params")
for (p<-pp) {
println(" name="+p.name)
println(" type="+p.typeSignature)
for (a<-p.getAnnotations) {
println(" annotation "+a.atp)
for ((aname,av)<-a.assocs) {
println(" "+aname.decoded+"="+av)
}
}
}
}
}
有什么方法可以获取注释对象的实例(就像您在 Java 注释中所做的那样),或者您是否必须通过 getAnnotations / 检查它是你想要的 / 迭代 assocs / 检查它是你想要的/ 以某种方式将结果与预期类型匹配 / 得到结果?