斯卡拉2.11反射和说明(JAVA)与参数
我用Java编写的一个简单的类级注解:斯卡拉2.11反射和说明(JAVA)与参数
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME)
public @interface Collection {
String name();
}
使用,如:
@Collection(name="mytable") case class Foo(...)
我需要反思在斯卡拉2.11课获取名称参数的值。我怎样才能得到这个信息?我在这里:
val sym = currentMirror.classSymbol(Class.forName(fullName)) val anno = sym.annotations.head
val annoType = anno.tree.tpe // I can get this...works
println(anno.tree.children.tail) // prints List(name = "mytable")
我很接近!我可以看到我的名字参数和它的值,但是这似乎不像Map或任何友好的东西。我如何获得我的注释参数的值?
回答:
树API实现产品获得元素了,所以这是一种哈克论证的,但你可以得到你的元素:
println(anno.tree.children.last.productElement(1)) // prints "mytable"
回答:
如果你能处理使用杰克逊,那么我会重新 - 使用其注释处理功能而不是使用scala反射。
object Test { @Collection(name="mytable")
case class Foo(bar: String)
def main(args: Array[String]): Unit = {
val introspector = new JacksonAnnotationIntrospector
val ac = AnnotatedClass.construct(classOf[Foo], introspector, null)
val annotation = ac.getAnnotations.get(classOf[Collection])
println(annotation.name())
}
}
如果该类没有注释,则annotation
为空。
以上是 斯卡拉2.11反射和说明(JAVA)与参数 的全部内容, 来源链接: utcz.com/qa/264070.html