如何让java方法注释在scala中工作

如何让java方法注释在scala中工作,java,scala,reflection,scala-java-interop,Java,Scala,Reflection,Scala Java Interop,我有两个项目,一个scala项目和一个java项目。我的scala项目引用构建路径中的java项目。在我的java项目中,我声明以下注释: @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { public String Name(); } 在我的scala项目中,我注释了一些方法。即 class MyClass { ... @My

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

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    public String Name();
}
在我的scala项目中,我注释了一些方法。即

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()
var methods=myClassInstance.getClass().getDeclaredMethods()
var myMethod:Method=null

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


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

谢谢你指出这一点。不幸的是,这不是问题所在。即使有一个注释,我仍然得到一个空数组。没有例外。你是如何做到这一点的?你能举个例子吗?谢谢!正如我所说,我只是使用你发布的代码。你的帖子ed代码引发异常(第一个版本),并且有编译错误(第二个版本,您应该为“var myMethod=null”行定义类型)我的scala版本是2.9.3谢谢你的帮助。我从2.8.3升级到2.9.3,不再引用java项目,而是在同一个项目中混合使用java和scala。看起来很有效。