【发布时间】:2013-02-03 05:28:59
【问题描述】:
其他示例获取带注释的类的注释。我想做的是获取类字段的注释(此测试中的版本),如下所示:
import java.lang.annotation.{RetentionPolicy, Retention}
import annotation.meta.field
class AttribField() extends scala.annotation.StaticAnnotation
object MyTypes { type Attrib = AttribField @field }
import MyTypes._
case class TestClass(@Retention(RetentionPolicy.RUNTIME)
@Attrib version: Option[String])
object TestMe {
def main(args: Array[String]) {
val testObj = new TestClass(version = Some("1"))
testObj.getClass.getDeclaredFields.foreach(field => {
field.setAccessible(true)
println("field: name=" + field.getName + " value=" + field.get(testObj))
field.getAnnotations.foreach(x => println("x="+x)) // nothing in here
field.getDeclaredAnnotations.foreach(x => println("y="+x)) // nothing in here
// does not even compile
// field.getAnnotation(classOf[AttribField])
})
}
}
我想测试是否有某个注解,然后分支。 但我不能通过去。我肯定错过了一些基本的东西,但是什么?
【问题讨论】:
-
1) 问题不在于如何注释类,如如何创建注释并在 scala 中获取它们。 2)我认为,Danyel 的答案越来越近了。但我必须承认,对于像我这样的基本编码人员,我永远不会想到获取注释会如此复杂。据我了解,它们的目的是帮助“getAnnotation”对我有用,但是要诅咒 Universe.type#Annotation,好吧……仍然无法确定版本是否有注释。
-
你真的读了吗?我链接到的问题解释了为什么它不起作用以及如何通过在 java 中声明注释来修复它,这是 2.10 之前的唯一解决方案,并且可能仍然是许多人在 2.10 中所做的。如果你使用的是java反射,也是only的解决方案。
标签: class scala annotations field