【问题标题】:How do you get java method annotations to work in scala你如何让java方法注释在scala中工作
【发布时间】:2012-12-06 08:36:25
【问题描述】:

我有两个项目,一个 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()

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

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

【问题讨论】:

    标签: java scala reflection scala-java-interop


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您指出这一点。不幸的是,这不是问题。即使有一个注释,我仍然得到一个空数组。没有抛出异常
    • 你是如何让它工作的?你可以发布一个例子吗?谢谢!
    • 正如我所说,我只是使用您发布的代码。您发布的代码引发异常(第一个版本),并且有编译错误(第二个版本,您应该为“var myMethod = null”行定义类型),在我解决它们之后,它就可以工作了。而我的 scala 版本是 2.9.3
    • 感谢您的帮助。我从 2.8.3 升级到 2.9.3,而不是引用 java 项目,而是在同一个项目中混合 java 和 scala。似乎工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2023-03-15
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多