2012-12-19 5 views
8

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:

Antwort

7

ich Ihren Code versucht, das Problem ist, dass Ihr zweimal Gebrauch @MyAnnotation für myMethod, die AnnotationFormatError erhöhen sollte.

+0

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

+0

Wie hast du das zur Arbeit gebracht? Können Sie ein Beispiel veröffentlichen? Vielen Dank! – Jordan

+0

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 –

Verwandte Themen