Ich habe zwei Projekte, ein Scala-Projekt und ein Java-Projekt. Mein Scala-Projekt verweist auf das Java-Projekt im Build-Pfad. In meinem Java-Projekt, Ich erkläre die folgende Anmerkung:Wie erhalten Sie Java-Methoden-Annotationen in scala
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
public String Name();
}
In meinem scala Projekt, ich bin einige Methoden mit Anmerkungen versehen. I.e.
class MyClass {
...
@MyAnnotation(Name="Blah")
def myMethod() {
...
}
}
In einer anderen Datei versuche ich, die Anmerkungen herauszuziehen.
var methods = myClassInstance.getClass().getDeclaredMethods()
var myMethod : Method = null
for (method <- methods) {
if (method.getName().equals("myMethod")) {
myMethod = method
}
}
var annotations = myMethod.getDeclaredAnnotations()
Leider ist annotations
immer ein leeres Array. Mache ich etwas grundsätzlich falsch oder verpasse ich nur etwas Minderwertiges? Vielen Dank! Ursprünglich
EDIT , ich war mit Anmerkungen versehen myMethod mit myAnnotation zweimal, was falsch ist, wie jemand darauf hingewiesen. Es stellte sich heraus, dass dies nicht das Problem war. Ich bekomme immer noch ein leeres Array für annotations
. Es wird keine Ausnahme ausgelöst. einmal zu verwenden, ruft die Reflexion nur die annotions Anmerkung Duplizieren für Klasse
Wenn ich es ändern:
Danke, dass Sie darauf hingewiesen haben. Leider war das nicht das Problem. Selbst mit einer Anmerkung bekomme ich immer noch ein leeres Array. Keine Ausnahme wird geworfen – Jordan
Wie hast du das zur Arbeit gebracht? Können Sie ein Beispiel veröffentlichen? Vielen Dank! – Jordan
Wie gesagt, ich benutze nur deinen geposteten Code. Ihr veröffentlichter Code löst Ausnahmen aus (erste Version) und hat Kompilierungsfehler (zweite Version, Sie sollten den Typ für die Zeile 'var myMethod = null' definieren), nachdem ich sie gelöst habe, funktioniert es. Und meine scala Version ist 2.9.3 –