斯卡拉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

回到顶部