8

scala プロジェクトと java プロジェクトの 2 つのプロジェクトがあります。私の 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常に空の配列です。私は根本的に間違ったことをしていますか、それとも些細なことを見逃しているだけですか? ありがとう!

編集 もともと、myMethod に myAnnotation で 2 回注釈を付けていましたが、これは誰かが指摘したように正しくありません。これは問題ではなかったことがわかりました。の空の配列をまだ取得していannotationsます。例外はスローされていません。

4

1 に答える 1

7

私はあなたのコードを試しましたが、問題は、あなたが myMethod に対して @MyAnnotation を 2 回使用していることです。

一度使用するように変更すると、リフレクションは注釈を取得するだけです。

于 2012-12-19T03:30:53.083 に答える