8

我有两个项目,一个 scala 项目和一个 java 项目。我的 scala 项目在构建路径中引用了 java 项目。在我的 java 项目中,我声明了以下注释:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    public String Name();
}

在我的 scala 项目中,我正在注释一些方法。IE

class MyClass {
    ...
    @MyAnnotation(Name="Blah")
    def myMethod() {
        ...
    }
}

在某个地方的另一个文件中,我试图提取注释。

var methods = myClassInstance.getClass().getDeclaredMethods()
var myMethod : Method = null
for (method <- methods) {
  if (method.getName().equals("myMethod")) {
    myMethod = method
  }
}
var annotations = myMethod.getDeclaredAnnotations()

不幸的是,annotations总是一个空数组。我是在做一些根本错误的事情,还是我只是错过了一些小事?谢谢!

编辑 最初,我用 myAnnotation 两次注释 myMethod ,正如有人指出的那样,这是不正确的。事实证明这不是问题所在。我仍然得到一个空数组annotations。没有异常被抛出。

4

1 回答 1

7

我尝试了您的代码,问题是您对 myMethod 使用了两次@MyAnnotation,这应该引发 AnnotationFormatError: Duplicate annotation for class

当我更改为使用一次时,反射只会检索注释。

于 2012-12-19T03:30:53.083 回答